软件设计师 · 高频练习

二维数组按行存储时,A[2][3] 的地址怎么计算?

中级 单选题 第 955 题 困难 软件设计师二维数组按行优先存储存储地址数据结构
题目

二维数组 A[0..3][0..5] 按行优先顺序连续存储,每个元素占 4 字节,A[0][0] 的首地址为 1000。A[2][3] 的首地址是()。

A 1020
B 1056
C 1060
D 1064
题目类型:原创高频练习题 用途:用于帮助理解软件设计师相关考点和答案解析,不等同于官方真题。
正确答案
C
答案解析

按行存储时,要先跨过前面的完整行。每行有 6 个元素,A[2][3] 前面共有 2×6+3=15 个元素,因此地址为 1000+15×4=1060。

选项分析

A

把行、列下标简单相加后乘元素长度,漏掉了每一整行包含 6 个元素。

B

这是按列优先计算得到的结果:1000+(3×4+2)×4=1056,与题设存储顺序不符。

C

正确。1000+(2×6+3)×4=1060。

D

多跨过了一个元素,常见原因是把目标元素本身也算进了前置元素数量。

本题为什么容易错

数组地址题很少难在乘法,真正容易错的是边界。题目已经写明下标从 0 开始,所以第 2 行之前只有两行;A[2][3] 之前只有本行的 0、1、2 三个位置。

先看结论

简短答案

二维数组按行存储时,A[2][3] 的地址怎么计算,正确答案是 C(1060)。按行存储时,要先跨过前面的完整行。每行有 6 个元素,A[2][3] 前面共有 2×6+3=15 个元素,因此地址为 1000+15×4=1060。

解析

易混淆概念对比表

概念本题判断区别要点记忆提示
1020 本题干扰项 把行、列下标简单相加后乘元素长度,漏掉了每一整行包含 6 个元素。 看到该词不要急着选,先判断是否真正解决题干问题
1056 本题干扰项 这是按列优先计算得到的结果:1000+(3×4+2)×4=1056,与题设存储顺序不符。 看到该词不要急着选,先判断是否真正解决题干问题
1060 本题正确答案 正确。1000+(2×6+3)×4=1060。 看到题干核心场景时优先联想到它
1064 本题干扰项 多跨过了一个元素,常见原因是把目标元素本身也算进了前置元素数量。 看到该词不要急着选,先判断是否真正解决题干问题
本题易混淆选项怎么区分
  • 1020:把行、列下标简单相加后乘元素长度,漏掉了每一整行包含 6 个元素。
  • 1056:这是按列优先计算得到的结果:1000+(3×4+2)×4=1056,与题设存储顺序不符。
  • 1064:多跨过了一个元素,常见原因是把目标元素本身也算进了前置元素数量。
复习

知识点详解

数组的逻辑下标必须映射到连续的物理地址。按行优先时,同一行的元素连续,跨到下一行前要越过一整行的列数;按列优先则相反。若数组下界不是 0,应使用(当前下标-下界)计算相对位置。

备考速记

按行先乘列数,按列先乘行数;先数元素,再乘字节。

数据结构在数据结构场景中的作用

数据结构在本题中的核心价值,是解决“二维数组 A[0..3][0..5] 按行优先顺序连续存储,每个元素占 4 字节,A[0][0] 的首地址为 1000。A[2][3] 的首地址是()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。

拓展

同类题怎么考

  • 一维数组给定下界后的地址计算
  • 二维数组按行或按列存储的地址计算
  • 三维数组线性化后的偏移量判断
数据结构在软件设计师软考中的考法

软考选择题通常不会只考概念定义,还会把数据结构放到数据结构场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。

解题思路

我讲这类题时,会让同学先把 A[2][3] 前面的两整行圈出来。两行是 12 个元素,本行再跨过 A[2][0]、A[2][1]、A[2][2] 三个元素,一共 15 个。最后乘 4 字节,而不是把下标直接乘 4。

考点定位

地址题先数前面有多少个元素,再乘每个元素占用的字节数。按行存储的核心式子是:基址+(行下标×列数+列下标)×元素长度。

易错提醒

  • 把按行优先误看成按列优先
  • 把最大列下标 5 当成每行只有 5 个元素
  • 计算前置元素时把目标元素也包含进去

备考提示

  • 遇到非零下界时,先把行列下标分别减去下界再代公式。
  • 先写元素偏移量 15,再换算成字节偏移量 60,分两步更稳。

你可能还想了解

  • 二维数组按行存储地址公式是什么?
  • 数组下标从0开始怎么计算偏移量?
  • 按行优先和按列优先有什么区别?
  • 二维数组元素占多个字节时地址怎么算?

本文小结

A[2][3] 前面有 2×6+3=15 个元素,每个元素占 4 字节,所以首地址为 1000+15×4=1060。