c语言 - 为什么初始化多维数组时不能完全省略维度?



在Visual Studio 2010中,这个初始化可以正常工作:

char table[2][2] = {
                       {'a', 'b'},
                       {'c', 'd'}
                   };

但是这样写似乎不合法:

char table[][] = {
                     {'a', 'b'},
                     {'c', 'd'}
                 };

Visual Studio抱怨这个数组可能不包含'that'类型的元素,编译后,VS报告两个错误:缺少索引和太多初始化。

QUESTION:为什么在初始化多维数组时不能完全省略维度?

只能省略最里面的维度。数组中元素的大小是根据给定数组变量的类型推断出来的。因此,元素的类型必须有一个已知的大小。

  • char a[];具有大小 1 (8bit)的元素(例如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[][];将有未知数量的元素和未知大小的

元素的大小是强制的,编译器需要它来访问元素(通过指针运算)。

这是一个可接受的解决方案吗?

char * table [] = { "ab", "cd" };

编辑:请注意,它将在每个字符串的末尾添加一个额外的''。

相关内容

  • 没有找到相关文章

最新更新