题目
设有数组 A [i] [j] ,数据的每个元素的长度为4 个字节, i 的值为0 到 9, j 的值 0 到 8 ,数组从首地址 Adr 开始顺序存储[1],当以列优先方式存放时,元素 A [ 6 ] [ 7 ] 的存储地址为A Adr + 300 B Adr + 302 C Adr + 304 D Adr + 306
设有数组 A [i] [j] ,数据的每个元素的长度为4 个字节, i 的值为0 到 9, j 的值 0 到 8 ,数组从首地址 Adr 开始顺序存储[1],当以列优先方式存放时,元素 A [ 6 ] [ 7 ] 的存储地址为
A Adr + 300
B Adr + 302
C Adr + 304
D Adr + 306
题目解答
答案
对于这道题目,数组 A 的每个元素的长度为 4 个字节,因此元素 A[i][j] 的存储地址为 Adr + 4 × (i + j × 10)。要求元素 A[6][7] 的存储地址,即将 i 替换为 6,将 j 替换为 7,得到 Adr + 4 × (6 + 7 × 10) = Adr + 4 × 76 = Adr + 304。
所以该题答案选C。
解析
考查要点:本题主要考查列优先存储方式下数组元素的地址计算,需要掌握行列索引的转换以及存储顺序的规律。
解题核心思路:
- 列优先存储的特点是按列依次存放元素,即同一列的所有行元素存储完毕后,再存储下一列。
- 计算元素的存储位置时,需先确定其所在列之前的所有列的总元素数,再加上当前列中该元素的行位置,最后乘以元素的字节长度,得到偏移量。
- 公式推导:地址 = 起始地址 + 元素序号 × 单个元素字节长度。
破题关键点:
- 明确数组的行列范围(i从0到9,共10行;j从0到8,共9列)。
- 正确计算列优先顺序下元素的总偏移量,避免行列顺序混淆。
步骤1:确定列优先存储的元素序号
在列优先存储中,元素的序号计算公式为:
$\text{序号} = i + j \times \text{行数}$
其中,行数为10(i从0到9)。
对于元素$A[6][7]$:
- 列索引$j=7$,对应前面有7列($j=0$到$j=6$),每列有10行,总元素数为:
$7 \times 10 = 70$ - 行索引$i=6$,在当前列中,前面有6个元素($i=0$到$i=5$)。
- 总序号为:
$70 + 6 = 76$
步骤2:计算存储地址
每个元素占4个字节,总偏移量为:
$76 \times 4 = 304$
因此,存储地址为:
$\text{Adr} + 304$