c++ - 为什么在声明多维数组时允许省略第一个维度,而不能省略其他维度?

标签 c++ arrays c multidimensional-array function-declaration

为什么不用提多维数组的第一维而需要提其他维度:

int A[][][2]={{{1,2},{3,4}},{{4,5},{5,6}}}; // error 
int A[][2][2]={{{1,2},{3,4}},{{4,5},{5,6}}}; // OK 

我无法理解这背后的概念或逻辑。

最佳答案

有必要提及二维数组的两个维度,除非它在函数的参数中,或者如果存在初始值设定项,则可以省略第一个维度。

在函数中用作参数时,例如

int 2D_arr[m][n]   

转换为

int (*2D_arr)[n]  

因此,第一维可以省略。但是,必须存在第二个维度以告诉编译器指针 2D_arr 是指向n 整数 数组的指针。

第二种情况,当存在初始化器时

int A[][2][2]={{{1,2},{3,4}},{{4,5},{5,6}}};    

编译器仅使用初始化器的长度来计算第一个维度。其余维度必须在声明时明确指定。

关于c++ - 为什么在声明多维数组时允许省略第一个维度,而不能省略其他维度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33328307/

相关文章:

c - 使用 C 将文件的前半部分替换为后半部分并截断?

c++ - 了解基本的动态分配示例

c++ - 将对象添加到 vector ,然后从迭代器更新它

c++ - 访问指向结构中的值是否比访问本地值花费更多时间?

c++ - 使用纯抽象数据类型作为返回?

C++ 数组函数没有返回正确的结果

javascript - TypeScript:连接具有不同元素类型的数组

java - 在 Java 中查找列表中的数组

c - C语言将二进制文件读入HashTable

c - 在c中使用指针进行字符串操作