二维数组定义

jac*_*lau 0 c++ arrays

根据我的理解,当我们定义一个数组时,我们需要具体说明它的大小

显式,因此编译器将知道数组占用所需的内存.

因此,

情况1:

int a[][3]; //illegal as we will not know the size of the int array
a[0][1]=2;
a[1][3]=4;
Run Code Online (Sandbox Code Playgroud)

但是当我添加这样的东西时:

案例2:

int a[][3]={0}; //the compiler didn't complain at all
a[0][1]=2;
a[1][3]=4;
Run Code Online (Sandbox Code Playgroud)

为什么编译器在这种情况下不会显示任何错误消息?情况2中的定义只告诉编译器有多少列,但行数仍然未知?编译器不应该以与案例1相同的方式行事吗?有什么理由解释这个吗?非常感谢

vis*_*hal 5

当您将数组定义为

int a[][3]={0};
Run Code Online (Sandbox Code Playgroud)

编译器将值分配给上面声明的数组:

int a[1][3]
Run Code Online (Sandbox Code Playgroud)

所以它没有抱怨

同样,如果你喜欢这样:

int a[][3]={0,2};
Run Code Online (Sandbox Code Playgroud)

它需要:

int a [2] [3]