如果有如下二维数组定义,则 a[0][3]的值为( )?
int a[2][2] = {{0, 1}, {2, 3}};这道题考的是二维数组的声明、初始化以及越界访问的内存行为。别被'越界'两个字吓到,C++里越界不会编译报错,而是直接按内存地址去读,得先算出a[0][3]在内存里对应的是哪个元素的值。
很多考生看到'越界'就条件反射选A,觉得会编译出错,其实C++数组越界只是读到了不该读的位置,不会报错;还有人会机械套用公式算偏移量,把a[0][3]当成a[0][3]本身,或者误以为第二维长度是3(因为题目问的是第4列),结果选成1或0,这都是被命题人故意设的坑。
【考点】二维数组定义|数组越界访问|行列索引理解
考纲定位:GESP 四级 C++ 组,题干直接考查数组维度与访问边界。命题人把数组写成 2×2 却问 a[0][3],就是要卡住'第二维长度是 2,列索引只能是 0 或 1'这一基础但易被忽略的细节。
解题思维:看到二维数组先确认行数和列数——本题为 2 行 2 列,因此第二维合法索引范围是 [0,1]。a[0][3] 的列索引 3 明显超出边界,C++ 中不会因此编译错误,而是按内存布局访问越界位置,故数值应取 a[0][3] 的存储值 3。
陷阱拆解:选项 A 把'越界'偷换成'编译错误',利用考生对数组越界行为的模糊认识;选项 B 和 D 分别对应 a[0][1] 和 a[0][0] 的值,是命题人故意设置的常见误选。最阴险的陷阱在于'越界访问是否合法'的绝对化表述,若只背'越界会报错'的结论,就会掉进 A 的坑。
反命题思维:若把数组改成 a[2][3] = {{0,1,2},{3,4,5}},a[0][3] 仍是越界,但 a[0][2] 合法值为 2;若改成 a[3][2],则行索引越界而列索引合法。刷到此类题,先问自己'命题人想考我什么'——是在考维度记忆、越界行为,还是行列混淆。
考频趋势:二维数组与多维数组在题库中共考过 29 题,覆盖 6 个考试级别(2008-2026),其中 GESP 四级就占了 20 题,说明该考点在四级中高频出现。逐年分布为:2008 年 1 题、2011 年 1 题、2014 年 2 题、2019 年 1 题、2022 年 1 题、2023 年 1 题、2024 年 4 题、2025 年 5 题、2026 年 9 题、null 年 4 题,呈现近年明显上升趋势,尤其是 2024-2026 连续三年加码。
预测:基于数据与经验,未来 GESP 四级仍可能继续高频考查二维数组的维度理解与越界行为,命题人大概率会延续'小数组大索引'或'行索引越界'这类陷阱,也可能结合循环嵌套考边界条件。暂无足够依据预测具体年份题型,但建议重点巩固二维数组声明、初始化及越界内存访问机制。