数组的存储(续) 个二维m×n数组中元素X[(第第j列 元素)的内存地址可以这样来计算: X[0][o](数组首地址)+(nxij)×元素的长度 (如C+中int型为4字节 ■例如,我们已知一个数组的A[0][0]元素在内 存的644的位置,假设元素的长度为8,那么我 们就可以求得其他任意元素A[x]y]的位置, 为644+1en×(n×x+y)。 例如,n=m=3,由上面公式得到A2]3]元素的 地址:644+8×(3×2+2)=708 北京大学信息学院 @版权所有,转载或翻印必究 Page 6
北京大学信息学院 ©版权所有,转载或翻印必究 Page 6 数组的存储(续) ◼ 一个二维m × n数组中元素X[i][j](第i行第j列 元素)的内存地址可以这样来计算: ◼ X[0][0](数组首地址)+(n×i+j)× 元素的长度 (如C++中int型为4字节) ◼ 例如,我们已知一个数组的A[0][0]元素在内 存的644的位置,假设元素的长度为8,那么我 们就可以求得其他任意元素A[x][y]的位置, 为644+len×(n×x + y)。 ◼ 例如,n = m = 3,由上面公式得到A[2][3]元素的 地址:644 + 8×(3×2+2)= 708
Pascal语言的存储实现是接行优 先处理的,先排最右的下标,从 右向左,最后最左的下标。 例如对于三维数组 a[1..k,1.m,1.n的元素a可 以如下排列: 北京大学信息学院 @版权所有,转载或翻印必究 Page 7
北京大学信息学院 ©版权所有,转载或翻印必究 Page 7 ◼ Pascal语言的存储实现是按行优 先处理的,先排最右的下标,从 右向左,最后最左的下标。 ◼ 例如对于三维数组 a[1..k,1..m,1..n]的元素axyz可 以如下排列:
Pascal语言的行优先存储 1118112a113 a 121 122 123 ain aiml aim2 a1m3 n a211a212a 213a 21n a 221a222a223 22n a2m1 a2m2 a2m3 2mn akl ak12 ak13 kln ak21 ak22 ak23 k2n akm1 akm2 akm3 kmn 北京大学信息学院 @版权所有,转载或翻印必究 Page 8
北京大学信息学院 ©版权所有,转载或翻印必究 Page 8 Pascal语言的行优先存储 a111 a112 a113 … a11n a121 a122 a123 … a12n ………………………… a1m1 a1m2 a1m3 … a1mn a211 a212 a213 … a21n a221 a222 a223 … a22n ………………………… a2m1 a2m2 a2m3 … a2mn ┇ ak11 ak12 ak13 … ak1n ak21 ak22 ak23 … ak2n ………………………… akm1 akm2 akm3 … akmn
FORTRAN语言采用列优先存储。 先排最左的下标,从左向右, 最后最右的下标。 例如对于三维数组a[1.k, 1.m,1.n]的元素a可以如 下排列: 北京大学信息学院 @版权所有,转载或翻印必究 Page 9
北京大学信息学院 ©版权所有,转载或翻印必究 Page 9 ◼ FORTRAN语言采用列优先存储。 先排最左的下标,从左向右, 最后最右的下标。 ◼ 例如对于三维数组a[1..k, 1..m, 1..n]的元素axyz可以如 下排列:
FORTRAN语言的列优先存储 111 211 311 k11 121a21a32 ax21 a a a ' km1 a112a212a312 ak12 122 a 222 a322 a k22 ●00●00●00000●000 1m2 a 2m2 3m2 a km2 a aln akin 22n a 32n k 2n amn 3 akon 北京大学信息学院 版权所有,转载或翻印必究 Page 10
北京大学信息学院 ©版权所有,转载或翻印必究 Page 10 FORTRAN语言的列优先存储 a111 a211 a311 … ak11 a121 a221 a321 … ak21 ………………………… a1m1 a2m1 a3m1 … akm1 a112 a212 a312 … ak12 a122 a222 a322 … ak22 ………………………… a1m2 a2m2 a3m2 … akm2 ┇ a11n a21n a31n … ak1n a12n a22n a32n … ak2n ………………………… a1mn a2mn a3mn … akmn