数组元素存储位置问题

设有 一个二维数组 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。

  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值