为什么使用二维数组时只有第二维对编译器很重要?只是无法理解我的头脑。 谢谢为什么只有第二个数组维度重要?
7
A
回答
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
坐下并找出给定数组起始位置的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]
..
请注意这将如何改变哪个尺寸是查找内存位置所需的。
4
它不是“第二维”(除非你只有2个维度) - 它是“除第一维以外的所有”。例如,你可以有int a[][2][3][4]
。没有这些尺寸,就无法计算元素的地址。
相关问题
- 1. 将数组复制到长度为1的二维数组作为第二维
- 2. 为什么我的二维数组只打印出一个值?
- 3. 为什么只输入第二个值?
- 4. 搜索只是一个二维数组的第一维
- 5. 获得第二维的数组长度
- 6. 获取数组的第二维长度
- 7. 为什么第二个数组比第一个少一个?
- 8. 为什么我们需要遍历二维数组中列的行长度
- 9. 多维数组中的第二维从未达到过,为什么?
- 10. 这个Java数组为什么被认为是二维的?
- 11. 为什么这个DQL查询生成一个二维数组?
- 12. ReDim现有的数组与第二维?
- 13. 将二维数组转换为二维数组的多个块
- 14. Java多维数组 - 为什么只定义足够的第一个大小?
- 15. 为什么我没有收到ArrayIndexOutOfBoundsException异常二维数组
- 16. 如何重新维度数组,只要我想
- 17. 二维数组错误,长度为
- 18. Java;二维数组长度
- 19. 二维数组长度
- 20. 为什么p在“int q [],p [];”是一个二维数组?
- 21. 为什么我不能生成这个10x10二维数组?
- 22. 为什么这不是一个二维数组?
- 23. 为什么我得到这个二维数组的错误?
- 24. $ _POST从数组的第二个维度值
- 25. 这个二维数组初始化代码有什么问题?
- 26. 这两个二维数组有什么区别?
- 27. 为什么classmethod的super需要第二个参数?
- 28. 为什么我需要第二个参数?
- 29. 将一维数组为二维数组
- 30. 二维数组,*(pointerArray [i] + j)是什么?
您能举个例子吗?如果我有一个[3] [4]编译器只需要一个[] [4],它怎么样?我无法理解这一点。真。 – 2010-04-01 17:04:30
它给编译器提供足够的信息来知道如何将内容放在内存中。如果你有12个元素并告诉它一个[] [],它可以是乘以12的任意两个数字(x和y)。如果你给它一个[] [4],它知道x和4乘以12 ,所以x必须是3.如果它有助于使其合理化,请设置一个基本方程式,其左侧的每个维度和右侧的元素总数。解决超过1个变量是困难的或不可能的。 – ssube 2010-04-01 17:28:33
@peachykeen:这有些误导。计算数组元素的地址时需要使用这些维度。然而,第一个维度是不需要的,因为它不是地址计算所必需的(上限是无关紧要的)。 – 2010-04-01 18:51:44