给定一个二维数组A[m][n],采用行优先存储方式,每个元素占k个存储单元。已知元素A[i][j]的存储地址为L,则元素A[p][q]的存储地址是多少?
答案解析
核心考点说明:二维数组的行优先存储地址计算,考察地址偏移量的理解。
解题思路分析:行优先存储,先存储第一行所有元素,然后是第二行,以此类推。计算地址偏移量需要考虑行数偏移和列数偏移。
每个选项的详细分析:
A. L + ( (p-i) * n + (q-j) ) * k: 此公式正确计算了从A[i][j]到A[p][q]的地址偏移量。首先计算行偏移 (p-i) * n,表示从第i行到第p行中间隔了多少行的元素,每行有n个元素。然后计算列偏移 (q-j) ,表示从第j列到第q列的元素偏移。最终乘以每个元素占用的存储单元大小k。此项正确。
B. L + ( (p-i) * m + (q-j) ) * k: 此公式中,(p-i) * m错误地计算了行偏移量,应该乘以每行的列数n,而不是行数m。此项错误。
C. L + ( (p-i) * n + (q-j) ): 此公式忽略了每个元素占用的存储单元大小k,导致地址计算错误。此项错误。
D. L + ( (p-i) * m + (q-j) ): 此公式既忽略了每个元素占用的存储单元大小k,又错误地计算了行偏移量。此项错误。
易错点提醒:二维数组地址计算要区分行优先和列优先,注意行列偏移量的正确计算,并考虑元素大小。
正确答案:A