二维数组存储位置计算

实际的应用题。

设由二维数组intM[10][20],每个元素(整数)占2个存储单位,数组的起始地址为2000,元素M[5][10]的存储位置是多少?


公式
loc[i,j] = loc[o,o]+(n*i+j)*k


公式解析
元素数量?
以i为分界点,分为i点前,在第i点。
  i行前:
    因为下标从0开始,基于M[5][10],所以i为5,j为10。之前有5行元素,且每行有20个元素,所以以整行为基地有5*20个元素,注意现在只是整行占有的元素

  在第i行
    在第i行,有j+1个元素。为什么是j+1呢?
    看图:

a(0.0)a(0,1)a(0,2)
a(1,0)a(1,1)a(1,2)
a(2,0)a(2,1)a(2,2)

    假设看a(1,1),可以发现在第一行有2个元素,也就是j+1。为什么会出现+1的情况,是因为我们的下标是从0开始的。

  合并
    因为是从i行为界限划分的,各自求出了各自范围的元素个数,那么现在我们需要将他们合在一起,也就是:n* i+j+1。共有n*i+j+1个元素。

  起始元素与目标元素位置差值
    我们的目标位置为n * i +j+1个,现在需要计算起始元素和目标元素的位置


存储位置?
  由以上得知元素个数为多少,且知道存储单位为k。可得出位置公式:loc[i,j]=loc[0,0]+(n * i+j)*k。其实公式就是初始地址+元素个数 * 元素单位大小(存储单位)


解此题。
对应一下各自的值:
  n=20(因为以M[10][20]为基底)
  i=5
  j=10
  元素个数:ni+j=205+10=110
  存储位置:起始地址+元素个数 * 存储单位=2000+110*2=2220

评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值