Allen_Wang226 2021-08-05 19:45 采纳率: 80%
浏览 63
已结题

为什么c++下面的指针数组中cout<<p[0];出来的是地址而cout<<p[0][0];则出来的是具体的值呢?再问一下p=n这句话是可以自动将一维的指针数组p变为二维的吗?

int main(){
    int n[2][3]={10,20,30,40,50,60};
    int(*p)[3];
    p=n;
    cout<<p[0]<<endl;
    
}


  • 写回答

2条回答 默认 最新

  • CSDN专家-cpp_learner 2021-08-06 14:45
    关注

    我补充一下吧!

    p确实是数组指针。
    1.
    int(*p)[3]; 为什么要写[3]呢?
    因为这样定义才能标识这个p数组指针可以指向二位数组n;
    你可以这样理解,我们定义二维数组时,可以不指定行,但一定要指定列,例如:int arr[][3];
    所以数组指针也是一样的道理,定义数组指针时必须指定列数。
    列数相同的数组指针才能指向列数相同的二维数组。

    2.
    p[0]相当于n[0][0]的地址
    p[1]相当于n[1][0]的地址
    p[0]、p[1]表示的是数组每行的首地址
    所以你想找到某个数值,必须指定到位,例如p[0][0]表示第一个数,* ( * ( p + 0 ) + 0)这样貌似表示的也是第一个数(有点忘记这种用法了), * (p[0])貌似表示的也是第一个数。

    3.
    p=n
    指针数组p指向二维数组n的首地址。

    本回答被专家选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月17日
  • 专家已采纳回答 8月9日
  • 创建了问题 8月5日

悬赏问题

  • ¥15 excel中的填充效果 对应poi的哪个对象啊
  • ¥20 急需求一个 手机抓包app支付链接脚本
  • ¥15 byte[]转String后值为[object Object]
  • ¥20 STM32 AD7734
  • ¥15 mmrotate官方的test工具死循环
  • ¥15 isolar-AB软件安装后打开出错
  • ¥15 如何让usb软件在电脑拔插无记录
  • ¥15 ecology9的待办推送外部系统
  • ¥15 Mplus跑出来的数据只有原数据的一半
  • ¥15 vue项目添加全局处理解决一些开发问题