赞
踩
设有 一个二维数组 A [m][n] ,假设 A [0][0] 存放位置在 644D , A [2][2] 存放位置在 676D,每个元素占一个空间,问 A [3][3]存放在什么位置?注D表示用 10 进制表示。
数组在内存中的存储空间是连续的,也就是说如果一个一维数组的第一个元素存放位置在100D,那么第二个元素就存放在101D。
二维数组可以看做是一个矩阵,在存储问题上可以有按行顺序存储和按列顺序存储。假设这个数组是一个n行m列的二维数组,如下图所示:
如果按行优先顺序存储的话,每个元素占一个空间,第一个元素A[0][0]的存储位置为644D则:
第一行元素的存储位置位: 644D , 645D … (644+(m-1))D;
第二行的存储位置为:(644+m)D,(644+m+1)D … (644+2m-1)D;
第三行的存储位置为:(644+2m)D,(644+2m+1)D … (644+3m-1)D;
依次类推
第n行存储位置为:(644+(n-1)m)D,(644+(n-1)m+1)D … (644+nm-1)D。
题中告知A[2][2]的存储位置为676D,则(644+2m+2)D=676D,可以的解出m=15。所以可以有A[3][3]的存储位置为:(644+3m+3)=692D,即A[3][3]的存储位置为692D。
如果按列优先顺序存储的话,每个元素占一个空间,第一个元素A[0][0]的存储位置为644D则:
第一列元素的存储位置位: 644D , 645D … (644+(n-1))D;
第二列的存储位置为:(644+n)D,(644+n+1)D … (644+2n-1)D;
第三列的存储位置为:(644+2n)D,(644+2n+1)D … (644+3n-1)D;
依次类推
第n行存储位置为:(644+(m-1)n)D,(644+(m-1)n+1)D … (644+mn-1)D。
题中告知A[2][2]的存储位置为676D,则(644+2n+2)D=676D,可以的解出n=15。所以可以有A[3][3]的存储位置为:(644+3n+3)=692D,即A[3][3]的存储位置为692D。
如果有一个二维数组A[n][m],每个数组元素占用k个字节,第一个数组元素的存储地址是Loc(a[0][0])
按行优先顺序存放的数组元素a[i][j](0 ≤ i ≤ n-1,0 ≤ j ≤ m-1)的存储地址为Loc(a[0][0])+(im+j)k;
按列优先顺序存放的数组元素a[i][j](0 ≤ i ≤ n-1,0 ≤ j ≤ m-1)的存储地址为Loc(a[0][0])+(jn+i)k。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。