理解三维数组的低下标优先存储求元素位序

设有一个三维数组a[m][n][p] 以低下标优先存储(m,n,p均从1开始),求元素a j1j2j3的位序(从1开始).

 

这个三维数组在内存中存储的顺序如下图

理解三维数组的低下标优先存储求元素位序

内存中一维的存储顺序有点不太好理解,结合下面的三维立体图来理解一下三维数组的低下标存储

 

理解三维数组的低下标优先存储求元素位序

求解公式为:k= ( j1 - 1) x ( n x p ) + ( j2 -1 ) x p + j3

我们来结合上图来理解一下:

要求a j1 j2 j3的位序,就是要知道它前面有几个元素。

由上图可以看出,m等于任意数时,一行都有( n x p )个元素。

当 m = j1 时,不看 m = j1 这一行,它前面有(  j1 - 1 ) 个( n x p ) 个元素。

当 n = j2 时, 不看 m= j1,n = j2 这一列,它前面有 ( j2 - 1 ) x p个元素

只看 m = j1 ,n = j2 这一列,a j1 j2 j3 这个元素在三维上前面有 j3 - 1 个元素

所以位序 k =  (  j1 - 1 ) x ( n x p ) + ( j2 -1 ) x p + j3 - 1 + 1 就是上面的公式。