当前位置:   article > 正文

数组元素存储位置问题_n维数组的存储地址怎么写

n维数组的存储地址怎么写

设有 一个二维数组 A [m][n] ,假设 A [0][0] 存放位置在 644D , A [2][2] 存放位置在 676D,每个元素占一个空间,问 A [3][3]存放在什么位置?注D表示用 10 进制表示。

解析:

数组在内存中的存储空间是连续的,也就是说如果一个一维数组的第一个元素存放位置在100D,那么第二个元素就存放在101D。

二维数组可以看做是一个矩阵,在存储问题上可以有按行顺序存储和按列顺序存储。假设这个数组是一个n行m列的二维数组,如下图所示:

二维数组

如果按行优先顺序存储的话,每个元素占一个空间,第一个元素A[0][0]的存储位置为644D则:

第一行元素的存储位置位: 644D , 645D … (644+(m-1))D;

第二行的存储位置为:(644+m)D,(644+m+1)D … (644+2m-1)D;

第三行的存储位置为:(644+2m)D,(644+2m+1)D … (644+3m-1)D;

依次类推

第n行存储位置为:(644+(n-1)m)D,(644+(n-1)m+1)D … (644+nm-1)D。

题中告知A[2][2]的存储位置为676D,则(644+2m+2)D=676D,可以的解出m=15。所以可以有A[3][3]的存储位置为:(644+3m+3)=692D,即A[3][3]的存储位置为692D。

如果按列优先顺序存储的话,每个元素占一个空间,第一个元素A[0][0]的存储位置为644D则:

第一列元素的存储位置位: 644D , 645D … (644+(n-1))D;

第二列的存储位置为:(644+n)D,(644+n+1)D … (644+2n-1)D;

第三列的存储位置为:(644+2n)D,(644+2n+1)D … (644+3n-1)D;

依次类推

第n行存储位置为:(644+(m-1)n)D,(644+(m-1)n+1)D … (644+mn-1)D。

题中告知A[2][2]的存储位置为676D,则(644+2n+2)D=676D,可以的解出n=15。所以可以有A[3][3]的存储位置为:(644+3n+3)=692D,即A[3][3]的存储位置为692D。

总结:

如果有一个二维数组A[n][m],每个数组元素占用k个字节,第一个数组元素的存储地址是Loc(a[0][0])

按行优先顺序存放的数组元素a[i][j](0 ≤ i ≤ n-1,0 ≤ j ≤ m-1)的存储地址为Loc(a[0][0])+(im+j)k;

按列优先顺序存放的数组元素a[i][j](0 ≤ i ≤ n-1,0 ≤ j ≤ m-1)的存储地址为Loc(a[0][0])+(jn+i)k。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/169217?site
推荐阅读
相关标签
  

闽ICP备14008679号