C语言二维数组问题
发布网友
发布时间:2022-05-27 07:51
我来回答
共4个回答
热心网友
时间:2023-10-12 03:05
a是二维数组。p是指向指针的指针。
二维数组空间上是连续的。
p如果当数组名用而且分配了空间的话,你会发现那其实是交错级数组(第二维的大小可以不一致,而且空间上可以不连续)。
自然a不能赋值给p。
下面这样才可以:
int *a[4];
p=a;
热心网友
时间:2023-10-12 03:05
因为类型不兼容,是否合法的判定和编译器有关。
a是一个3元素数组,其中每个元素是包含4个int的数组
a的的类型是int (*)[4],和int **是不兼容的。
p可以这么声明: int (*p)[4] = a;
热心网友
时间:2023-10-12 03:06
a 的类型是 int* [4];
p 是(int* 类型指针)的指针,即 指针的指针。
因此类型不等,不能用a为p赋值。
再直观一点:
a[3][4] == * ( *( a + 3 ) + 4 ) ==( *( a + 3) )[4];
因为*数组的最后一维数必须确定,所以可以写成如下
int (*p)[4] = a;
热心网友
时间:2023-10-12 03:06
指针的赋值只能在指针之间
数组a不是指针
可以p=&a;