在 Visual Studio 2010 中,此初始化按预期工作:
char table[2][2] = {
{'a', 'b'},
{'c', 'd'}
};
但是这样写似乎是不合法的:
char table[][] = {
{'a', 'b'},
{'c', 'd'}
};
Visual Studio 提示这个数组可能不包含“那个”类型的元素,编译后,VS 报告两个错误:缺少索引和太多初始化。
问题:为什么我不能在初始化多维数组时完全省略维度?
最佳答案
只能省略最里面的维度。数组中元素的大小是根据给定数组变量的类型推导出来的。因此,元素类型必须具有已知大小。
char a[];
具有 大小 1(8 位)的元素(例如a[0]
),并且大小未知.char a[6];
具有大小 1 和 6 的元素。char a[][6];
有元素(例如a[0]
,它是一个数组)大小 6,大小未知。char a[10][6];
具有大小 6 的元素,并且大小为 60。
不允许:
char a[10][];
将包含 10 个未知大小的元素。char a[][];
会有未知数量的元素未知大小。
元素的大小是强制性的,编译器需要它来访问元素(通过指针运算)。
关于c - 为什么在初始化多维数组时不能完全省略维度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7432831/