原文链接: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