正如我的老师告诉我的那样,数组声明不能接受地址作为赋值.
int a[]={1,2};
int b[2]=a;
Run Code Online (Sandbox Code Playgroud)
这显示错误为初始化程序无效.但我正在玩这样的东西,并发现了如下的奇怪的例子.
int a[][3] = {1, 2, 3, 4, 5, 6};
int (*ptr)[3] = a;
Run Code Online (Sandbox Code Playgroud)
这也是一个数组的声明,其地址与ptr指针一起保存,并且接受2维数组a的地址,但这显示没有错误.为什么,有人可以用简单的语言解释我吗?提前致谢.
在第二个示例中,ptr不是数组而是指向数组的指针.
初始化此指针,a其中一个数组在此上下文中衰减为指向其第一个元素的指针.ais 的类型int [6][3],即大小为6的数组,其中每个元素是一个类型的数组int [3].所以指向ahas类型的元素的指针int (*)[3],它匹配的类型ptr.