【转载】数组的维界基址和映像函数常量基址理解

原文链接:https://blog.csdn.net/panglinzhuo/article/details/79397277


*base:

数组元素基址,以二维数组A为例,将数组(按行或者按列)拉成一个向量L所组成的线性结构的首地址.

*bounds:

数组维界地址,指向一个一维数组B,它存放了数组A各维度元素的数目.假设数组A是(3,4,5)大小的, 则数组B=[3,4,5]

*constants:

数组映像函数常量基址,指向一个数组C, 它存放了"数组A各个维度上的数字加一时, 元素在线性结构L上所移动的距离".举个栗子吧!

首先二维数组A(3,4):

bounds[] = [3,4]; 

constants[] = [4,1]:代表第0维上的数字每加一, 元素在线性结构L中的位置就增加了4; 而第一维上的数字每加一, 元素位置也是加一

若要求坐标为(2,2)的元素地址addr.(处在第三行,第三列的位置),则

addr = 数组A首元素地址 + 2*constants[0] + 2*constants[1] 

= 数组A首元素地址 +  2*4+2 = 数组A首元素地址 + 10


再看一个三维数组A(3,4,5):

bounds[] = {3,4,5}

constants[] = {4*5, 5, 1}     

可以看出:constants[2] = 1;   constants[1] = constants[2]*bounds[2];   constants[0] = constants[1]*bounds[1]

即:constants[i] = constans[i+1]  *  bounds[i+1]

对于一个元素, 其第0维每增加一, 在线性结构L中的位置就增加了4*5 = 20个, 以此类推.

则元素(1,2,3)的元素位置为:

1*constants[0] + 2*constants[1]  + 3*constants[2] = 1*20 + 2*5 +3*1 = 33

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>