正如我的老师告诉我的,数组声明不能接受地址作为赋值。
int a[]={1,2};
int b[2]=a;
这显示错误为无效的初始值设定项。 但我正在玩这些东西,发现 奇怪的例子如下。
int a[][3] = {1, 2, 3, 4, 5, 6};
int (*ptr)[3] = a;
这也是一个数组的声明,其地址与ptr指针保持一致,并且接受二维数组a的地址,但没有显示错误。 为什么,有人可以用简单的话向我解释一下吗?提前致谢。
最佳答案
在您的第二个示例中,ptr
不是一个数组,而是一个指向数组的指针。
此指针使用 a
初始化,它是一个数组,在此上下文中,衰减 指向其第一个元素的指针。 a
的类型是int [6][3]
,即大小为6的数组,其中每个元素都是int [3]<类型的数组
。因此,指向 a
元素的指针的类型为 int (*)[3]
,它与 ptr
的类型匹配。
关于c - 带分配地址的数组声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51272912/