可以在没有明确大小的情况下初始化C中的二维数组吗?

Woj*_*Gac 10 c arrays gcc initialization

我有一个关于C中的二维数组的问题.我现在知道(从直接编译器经验)我不能像这样一维数组初始化这样的数组:

int multi_array[][] = {
  {1,2,3,4,5},
  {10,20,30,40,50},
  {100,200,300,400,500}
};

> compiler output:

gcc -o arrays arrays.c
arrays.c: In function ‘main’:
arrays.c:8:9: error: array type has incomplete element type
Run Code Online (Sandbox Code Playgroud)

最接近的解决方案是明确提供列数如下:

int multi_array[][5] = {
  {1,2,3,4,5},
  {10,20,30,40,50},
  {100,200,300,400,500}
};
Run Code Online (Sandbox Code Playgroud)

我的问题是:如果明确地提供数字(这毕竟编译器应该能够推断自己),它可以整齐地完成吗?我不是在谈论手动构建它malloc或者是什么,而是与我尝试的东西接近.另外,对C编译器有所了解的人可以从低级别的角度解释为什么我的初始尝试不起作用吗?

我使用plain gcc而没有非标准选项来编译代码.

谢谢

Rik*_*yay 1

中的二维数组C存储在连续的内存位置中。因此,如果不提供行数或列数,编译器如何知道有多少行和列呢?

对于行主矩阵,行内容位于连续的内存位置。因此您至少需要指定列数。同样,对于列主矩阵,您至少需要指定行数。是行优先还是列优先是由架构定义的。看来你拥有的是行主要架构。

  • 是的,但在提问者的情况下,他提供了初始化程序,并且编译器可以从中推断出提问者在他的问题中评论过的第一维的大小。 (3认同)