题目
设A是一个m*n阶矩阵,A按列序存储在一组连续的存储单元[1]中,每个元素占用w个存储单元,若A[1,1]的存储地址为base,则A[i,j]的存储地址为( )。A. base+(j*m+i)*wB. base+(j*m+i)*wC. base+[(j-1)*m+(i-1)]*wD. base+[(i-1)*m+(j-1)]*w
设A是一个m*n阶矩阵,A按列序存储在一组连续的存储单元[1]中,每个元素占用w个存储单元,若A[1,1]的存储地址为base,则A[i,j]的存储地址为( )。
- A. base+(j*m+i)*w
- B. base+(j*m+i)*w
- C. base+[(j-1)*m+(i-1)]*w
- D. base+[(i-1)*m+(j-1)]*w
题目解答
答案
C.base+[(j-1)*m+(i-1)]*w
解析
考查要点:本题主要考查矩阵按列优先存储的地址计算方法,需要理解存储顺序与元素位置的关系。
解题核心思路:
- 按列存储意味着同一列的元素连续存放,先存储第1列,再第2列,依此类推。
- 元素的总偏移量由两部分组成:前面所有列的元素总数,以及当前列中前面的元素数。
- 行列索引调整:题目中行列索引从1开始,计算时需减1转换为偏移量。
破题关键点:
- 列优先:总偏移量 =
(列号-1) × 行数 + (行号-1)
。 - 地址公式:
base + 总偏移量 × 单个元素占用的存储单元数
。
地址计算步骤
-
确定列优先的存储顺序
按列存储时,第j
列的元素存储在第1
到j-1
列的所有元素之后。每列有m
个元素,因此前j-1
列共有(j-1) × m
个元素。 -
计算当前列内的偏移量
在第j
列中,元素A[i,j]
前面有(i-1)
个元素(因为行号从1开始)。 -
总偏移量公式
总偏移量为:
$(j-1) \times m + (i-1)$ -
转换为存储地址
每个元素占w
个存储单元,因此地址为:
$\text{base} + \left[(j-1) \times m + (i-1)\right] \times w$
选项分析
- 选项C正确对应上述公式。
- 选项D是按行优先存储的公式,与题意不符。
- 选项A、B的表达式未正确调整行列索引或顺序。