程序员 · 高频练习

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

初级 单选题 第 1123 题 较难 程序员二维数组按行存储地址计算数组下标
题目

二维数组A[3][4]按行优先连续存储,下标从0开始。若A[0][0]的地址为1000,每个元素占2字节,则A[2][1]的地址是()。

A 1006
B 1010
C 1018
D 1024
题目类型:原创高频练习题 用途:用于帮助理解程序员相关考点和答案解析,不等同于官方真题。
正确答案
C
答案解析

按行存储时,A[2][1]前面有2个完整行共2×4=8个元素,再加本行前面的1个元素,共偏移9个元素。字节偏移为9×2=18,所以地址为1000+18=1018。

选项分析

A

错误。只考虑了部分下标,没有跨过前两整行。

B

错误。把行、列或元素长度混算。

C

正确。偏移9个元素,即18字节。

D

错误。把数组总容量或其他边界当成目标地址。

本题为什么容易错

最容易错的不是乘法,而是把A[2][1]看成第2行第1列。题目已说下标从0开始,它实际位于第3行第2列。

先看结论

简短答案

二维数组按行优先存储时,A[2][1]的地址怎么计算,正确答案是 C(1018)。按行存储时,A[2][1]前面有2个完整行共2×4=8个元素,再加本行前面的1个元素,共偏移9个元素。字节偏移为9×2=18,所以地址为1000+18=1018。

解析

易混淆概念对比表

概念本题判断区别要点记忆提示
1006 本题干扰项 错误。只考虑了部分下标,没有跨过前两整行。 看到该词不要急着选,先判断是否真正解决题干问题
1010 本题干扰项 错误。把行、列或元素长度混算。 看到该词不要急着选,先判断是否真正解决题干问题
1018 本题正确答案 正确。偏移9个元素,即18字节。 看到题干核心场景时优先联想到它
1024 本题干扰项 错误。把数组总容量或其他边界当成目标地址。 看到该词不要急着选,先判断是否真正解决题干问题
本题易混淆选项怎么区分
  • 1006:错误。只考虑了部分下标,没有跨过前两整行。
  • 1010:错误。把行、列或元素长度混算。
  • 1024:错误。把数组总容量或其他边界当成目标地址。
复习

知识点详解

对于下标从0开始、共有N列的按行数组A[i][j],前置元素数为i×N+j,地址为base+(i×N+j)×elementSize。

备考速记

按行存:先跨i整行,再走j格,最后乘字节。

数组下标在数组下标场景中的作用

若同一数组按列优先存储且共有M行,则前置元素数变为j×M+i。判断存储顺序要在代数前完成。

拓展

同类题怎么考

  • 给基地址和元素长度计算二维数组元素地址。
  • 比较按行优先与按列优先的偏移公式。
数组下标在程序员软考中的考法

把目标位置前的元素格涂出来,确认数量后再乘字节数,公式不易背反。

解题思路

老师建议别急着套公式,先数完整行:前两行8个,再数当前行左边1个,共9个。每个2字节,答案就是1000+18,选C。

考点定位

地址偏移按前面有多少元素计算,最后才乘元素字节数;下标从0还是1开始会直接改变公式。

易错提醒

  • 用行数3代替列数4参与偏移。
  • 算出9后忘记乘元素长度2。
  • 未确认按行优先还是按列优先。

备考提示

  • 先数前面的完整行,再数本行前面的元素。
  • 书木兰软考题库 https://www.shumulan.com/ 做数组章节时,可把‘下标起点错、行列数错、字节数漏乘’分成三类错题复盘。

你可能还想了解

  • 二维数组按行地址怎么算?
  • 为什么偏移要乘元素字节数?
  • 按列优先公式是什么?

本文小结

A[2][1]前有9个元素,每个2字节,因此按行存储地址为1000+9×2=1018。