实际的应用题。
设由二维数组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