在内存中按矩形数组的顺序排列

14
在C语言中,对于数组A[2][3],最右侧的索引改变会导致最小内存地址偏移,即元素在内存中的位置为A[0][0], A[0][1]... 在.NET中的矩形数组是否也是如此?如果我们有一个数组a[2, 3],那么元素在内存中的位置是a[0, 0], a[0, 1]...吗?

你并没有在比较可比的东西。你的 C 数组并不是真正的二维数组,而是一个数组的数组。在 C# 中也可以这样做:例如 int[][],而不是 int[,] - svick
@svick,你完全错了。 - Petr Abdulin
不,这就是C语言中实现二维数组的方式。它们只是一个一维数组,其元素本身又是一维数组。 - Cody Gray
1
除了正式定义和概念外,@CodyGray所说的内容是C#中矩形数组的直接类比。而在C#中,int[][]则是完全不同的东西,类比于C中的*int[] - Petr Abdulin
1个回答

25

CLI规范,第8.9.1节规定:

数组元素应按行主序排列在数组对象中(即,与最右边的数组维度相关联的元素应按从最低到最高的索引连续排列)。每个数组元素实际分配的存储空间可以包括特定于平台的填充。

因此,答案是肯定的——您将首先遇到第一行的所有元素,然后是第二行的所有元素,以此类推(正如规范所说,这称为“行主序”)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接