特别注意数组下标与元素地址的区别!
2-1 设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为()
A.13
B.33
C.18
D.40
答:B;
行序为主存储,在此存储下三角矩阵元素,前7行有:(1+7)*7/2=28个元素,第八行中,a(8,5)前面还有四个元素,所以a(8,5)地址为28+4+1=33
2-2设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为()
A.BA+141
B.BA+180
C.BA+222
D.BA+225
答:B;
A[5,8]以列为主,该元素处于第八列,前七列是满的每列8个元素,该元素处于第五行,他的前一个元素A[4,8]的结束地址就是所求的开始,最后,每个元素占3字节。所以有公式:(7*8+4)*3
2-3对于 C 语言的二维数组 int A[m][n],每个元素占 2 个字节,数组中元素 a[i,j]的存储位置可由( )式确定。
A. Loc[i, j]=A[m, n]+(n×i + j )×2
B. Loc[i, j]=Loc[0, 0]+[ (m+n)×i+j ]×2
C. Loc[i, j]=Loc[0, 0]+ (n×i+j)×2
D. Loc[i, j]= (n×i+j)×2
答:C;
首先确定在BC中选择,数组首地址下标为[0,0]前i-1行元素个数为i*n,再加上j同一行中前面的数字、每个元素两字节,有Loc[i, j]=Loc[0, 0]+ (n×i+j)×2。
2-4.数组 A[0…5, 0…6] 的每个元素占 5 个字节,将其按列优先次序存储在起始地址为 1000 的内存单元中,则元素 A[5, 5] 的地址是( )。
A. 1175 B. 1180 C. 1205 D. 12