Arrays 查找数组中sepcific元素的位置地址

Arrays 查找数组中sepcific元素的位置地址,arrays,multidimensional-array,memory-address,Arrays,Multidimensional Array,Memory Address,我想知道如何在三维数组中找到特定索引的内存地址,而不必使用代码,例如我有数组[5][5][6]我想找到索引元素数组[2][2]在内存中的位置如果我在内存中为数组中的第一个元素使用address500。这取决于您使用的语言是否指定了它的数组寻址/分配 既然您在评论中提到了使用row-major方案的C,我将首先描述它 假设你有一个三维数组,intarr[X][Y][Z]其中X、Y和Z是自然数 一个例子可能是在多个页面上拆分的网格中,其中感兴趣的数据具有特定的页面、行和列 我们对存储在给定点的数据感

我想知道如何在三维数组中找到特定索引的内存地址,而不必使用代码,例如我有
数组[5][5][6]
我想找到索引元素
数组[2][2]在内存中的位置
如果我在内存中为数组中的第一个元素使用address
500

这取决于您使用的语言是否指定了它的数组寻址/分配

既然您在评论中提到了使用row-major方案的C,我将首先描述它

假设你有一个三维数组,
intarr[X][Y][Z]其中XYZ是自然数

一个例子可能是在多个页面上拆分的网格中,其中感兴趣的数据具有特定的页面

我们对存储在给定点的数据感兴趣,(a,b,c)(即
arr[a][b][c]
)。在行主系统中,点(a、b、c)表示第h页、第b行和第cth列

要使用行主系统计算该阵列中给定点的偏移量,请使用以下计算:

offset = a*Y*Z + b*Z + c
所以

列主系统中,索引的重要性是相反的。因此,点(a,b,c)将描述cth页面bth行中的ath列

因此,偏移量变为:

offset = a + b*X + c*X*Y
i、 e:

这有什么关系?地点它决定如何在阵列上循环。在行主索引系统中,最后一个索引是连续的,因为在增加其他索引之前,应该先对其进行迭代,以避免在整个内存空间中跳转。在一个主系统中,情况正好相反

假设我们有一个由函数返回的6x7x8数组:
intarr[6][7][8]
假设
arr[0][0][0]
位于地址0x1000。在行主系统中,
arr[0][0][1]
将位于0x1001;紧邻
arr[0][0][0]


不过,在主系统中,
arr[0][0][1]
将位于0x102A,与(相对而言)
arr[0][0][0]
相差甚远。如果我们处理的是一个大数组,而不知道我们的语言实现的大多数系统,那么我们可能会浪费大量时间,不必要地跳过内存空间。

许多语言都有数组。你用哪一种?请在您的问题中添加相应的标记。@JeroenMostert我不使用任何编程语言,我想在等式中找到它,但您的数组使用什么语言?数组元素具有内存地址的概念与C最为密切相关。除非您指定了数组在内存中的排列方式,否则谈论具有内存地址的数组是毫无意义的,而这正是语言所指定的。@Jeroenmoster如果我使用任何编程语言,我将使用
C
C
,我的数组是固定长度的,但在静态分配中,所有元素都排列在内存中
offset = a + b*X + c*X*Y
arr[a][b][c] == *(arr + a + b*X + c*X*Y)