我不确定是否history标签是相关的,但请随意添加。
我认为这是历史原因,这就是我提出这个建议的原因。
为什么我无法声明如下所示的函数签名?
void foo(int doubly_indexed_array[][]) {
...
}
这使
$ gcc mem.c
mem.c:4: error: array type has incomplete element type
为什么必须声明如下所示的维度之一?
void foo(int doubly_indexed_array[][10]) {
...
}
您需要声明第二个,而不仅仅是一个。它与内存布局有关,二维数组连续存储在内存中,这意味着所有二维数组都是连续的。
So for int[2][2]
内存布局如下(假设初始化为 0):
[[0, 0][0, 0]]
例如,编译器必须知道在第一个维度上索引时要增加多少指针。所以如果一个 int 数组被命名为 a,
a[i][j]
是真的(address of a) + i*sizeof(int)*second_dimension + j*sizeof(int)
所有这些都需要在编译时知道,以便编译器可以生成代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)