GESP 四级 · GESP 202309 C++ 四级 第 10 题

选择题 · 答案 C

← 整套速查表 GESP 四级 全部真题

题目

一个三维数组定义为 long long array[6][6][6];,则 array[1][2][3] 和 array[3][2][1] 在内存中的位置相差多少字节?( )

答案:C

解题思维

三维数组内存位置差值计算,核心是抓住行优先存储规则,把三维下标‘展平’成一维偏移量,再乘以元素大小。

常见错误

最容易栽跟头的地方是默认用 int 的 4 字节去算,或者把三维下标当成三个独立维度分别算偏移,导致差值完全跑偏。还有学生看到选项 D 就慌,其实只要记住数组在内存里是连续存放的,下标不同位置差一定可算。另外别把字节序搞混,C++ 数组默认行优先,不是列优先,这一步想错后面全错。

详细解析(节选)

【考点定位】这道题考的是多维数组在内存中的存储规则,核心是‘行优先’展开和元素字节大小。命题人专挖两个坑:一是让你忽略 long long 占 8 字节这个细节,二是让你把三维下标当成三个独立维度分别算偏移,导致差值跑偏。考频数据很能说明问题:数据存储单位在题库里共考过 52 题,其中 GESP 四级就占了 10 题,占比接近两成,说明这是四级必考硬骨头;从逐年分布看,2024 年考了 4 题、2025 年考了 7 题,热度还在持续上升,2023 年这题就是典型代表。解题心法是‘先类型,再展开,最后相减’:看到 long long 先反应出元素占 8 字节,别用 int 的 4 字节去算。三维数组按行优先存储,数组定义为 array[6][6][6],意味着第一维步长是 6×6=36 个元素,第二维步长是 6 个元素,第三维步长是 1 个元素。所以 array[i][j][k] 相对于 array[0][0][0] 的字节偏移量 = (i×36 + j×6 + k) × 8 字节。代入计算:array[1][2][3] 偏移 = (1×36 + 2×6 + 3) × 8 = (36 + 12 + 3) × 8 = 51 × 8 = 408 字节;array[3][2][1] 偏移 = (3×36 + 2×6 + 1) × 8 = (108 + 12 + 1) × 8 = 121 × 8 = 968 字节。两者差值 = 968 - 408 = 560 字节,对应选项 C。避坑提醒:选项 D 是陷阱,数组在内存里是连续存放的,只要下标不同位置差一定可算;选项 A 和 B 分别是误用 int(4 字节)或忽略行优先导致的错误索引展开。反命题思维:若将数组定义为 int array[6][6][6],则差值变为 280 字节;若交换下标为 array[1][3][2],则偏移 = (1×36 + 3×6 + 2) × 8 = 62 × 8 = 496 字节,差值 = 496 - 408 = 88 字节。刷到此类题先问‘命题人想考我什么’:是考字节序、类型大小还是下标展开?从考频趋势看,数据存储单位在四级占比高且近年热度上升,未来大概率还会以类似形式出现,可能换下标组合或数组维度来考。暂无足够依据预测具体年份题型,但行优先展开和 long long 字节大小这两个点必须牢牢掌握。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断