为什么在处理二维数组时,第二维对编译器很重要?只是无法理解这一点。 感谢
答案 0 :(得分:6)
因为编译器需要弄清楚如何从内存中访问数据。第一个维度并不重要,因为编译器可以在给出所有其他大小时计算项目数。
示例:
int a1[] = { 1, 2, 3, 4 }
编译器知道为4个整数分配空间。现在,有了这个:
int a2[][] = { 1, 2, 3, 4, 5, 6} }
编译器无法确定它应该是a2 [1] [6]还是a2 [2] [3]或a2 [3] [2]或a2 [6] [1]。一旦你告诉它第二个维度,它就可以计算出第一个维度。
例如,尝试访问元素a2 [1] [0]会产生不同的值,具体取决于声明。您可能会获得2,3,4或甚至无效的职位。
答案 1 :(得分:4)
这不是“第二个维度”(除非你只有2个维度) - 它是“除了第一个维度之外的所有维度”。所以你可以拥有int a[][2][3][4]
。没有这些尺寸,就无法计算元素的地址。
答案 2 :(得分:1)
坐下来弄清楚如何在给定数组起始位置的情况下找到a[i][j]
的内存位置。
请注意,c数组的布局如下a[0][0]
a[0][1]
a[0][2]
... a[0][M]
a[1][0]
...
旁注: FORTRAN数组的布局不同:a[1][1]
a[2][1]
a[3][1]
... a[N][1]
a[1][2]
..
注意这将如何改变查找内存位置所需的维度。