为什么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;
    
}


我补充一下吧!

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的首地址。

p是数组指针。指向n
p[0][0] 相当于 n[0][0]