一 数组的存储地址的计算
一维数组:
①从0开始:A[0...n-1] base:首地址
L:每个数组元素所占的存储单元
base+i*L (0≤i<n)
②从1开始:
base+i*L (0≤i<n)
二维数组:
①从0开始: A[0...M][0...N] 求a[i][j]
行优先存储:base+[i*(N+1)+j]*L
列优先存储:base+[j*(M+1)+i]*L
②从1开始: A[1...M][1...N] 求a[i][j]
行优先存储:base+[(i-1)*N+j-1]*L
列优先存储:base+[(j-1)*M+i-1]*L
三维数组:
eg.数组A[1...8][-2...6][0...6]以行为主序存储,设第一个元素的首地址是78,每个元素的长度为4,试求元素A[4,2,3]的存储地址。
分析:
1.A[1...8][-2...6][0...6]:8层,9行,7列,以行为主序;
2.第一个元素首地址A[1][-2][0],地址为78
3.A[4,2,3]:层,行,列
式子:(4-1)*9*7+[2 -(-2)*7+3)]=220 220*4+78=958
4前面有三层*每层是行乘列 -2,-1,0,1 共4行 乘 列 + 列