GESP 四级 · GESP 202603 C++ 四级 第 18 题

判断题 · 答案 B

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

题目

执行下面代码,输出结果为 $5$。

int main() {
    int a[2][3];
    cout << &a[1][2] - &a[0][1] << endl;
    return 0;
}
答案:B

解题思维

答案B。指针和数组的代码追踪:画出变量和指针的内存示意图,追踪每次赋值后值的变化。

常见错误

指针和数组追踪时画内存布局图可以大大简化理解。

详细解析(节选)

【考点】数组内存布局|指针运算

🎯 考纲定位 本题考查《GESP 四级大纲》"基本编程与数据结构"模块中的多维数组与指针运算。命题人专卡"指针相减只算元素个数、不乘 sizeof"这一共性盲区——四级考生普遍以为 &a[1][2] - &a[0][1] 等于 2 或 3,完全忽略内存中每个 int 占 4 字节的事实。

🧠 解题思维 数组 a[2][3] 按行主序存储:前 3 个 int 是第 0 行,后 3 个是第 1 行。a[0][1] 距 a[1][2] 正好差 2 个元素(先下移一行 + 右移一列)。指针相减运算规则是"元素个数 × sizeof(元素类型)",故输出为 2 × sizeof(int) = 8。

🪤 陷阱拆解 A 选项"正确"的陷阱在于命题人把"两个元素之差"偷换成"两个 int 之差",诱导考生只数格子不关心类型大小。若把 int 换成 char,结果变 2;换成 long 变 16。题目故意不写 sizeof(int) 的值,就是想看你是否真正理解地址差与元素类型的关系——背结论的人必掉坑。

🔄 反命题思维 若把数组改成 a[3][3],&a[2][2] - &a[0][1] 仍是 2 个元素,答案不变;若改成 a[1][2] 与 a[0][1] 交换位置,差值变 -8。刷到类似题先问:"命题人想考我的是元素个数还是元素大小?"

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