根据我的理解,当我们定义一个数组时,我们需要具体说明它的大小
显式,因此编译器将知道数组占用所需的内存。
因此,
案例1:
int a[][3]; //illegal as we will not know the size of the int array
a[0][1]=2;
a[1][3]=4;
但是当我添加这样的东西时:
案例2:
int a[][3]={0}; //the compiler didn't complain at all
a[0][1]=2;
a[1][3]=4;
为什么编译器在这种情况下不显示任何错误消息?情况2中的定义只告诉编译器有多少列,但行数仍然未知?编译器不应该以与案例1相同的方式行事吗?有什么理由解释这个吗?非常感谢你
答案 0 :(得分:5)
将数组定义为
int a[][3]={0};
编译器将值分配给上面声明的数组:
int a[1][3]
所以没有抱怨
同样如果你喜欢这样:
int a[][3]={0,2};
需要:
int a [2] [3]