为什么只有第二个数组维度很重要?

时间:2010-04-01 16:51:17

标签: c++ arrays

为什么在处理二维数组时,第二维对编译器很重要?只是无法理解这一点。 感谢

3 个答案:

答案 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] ..

注意这将如何改变查找内存位置所需的维度。