GESP 四级 · GESP 202503 C++ 四级 第 5 题

选择题 · 答案 D · 考点:函数

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

题目

执行下述代码,将输出( )。

void swap(int a, int &b) {
    int temp = a;
    a = b;
    b = temp;
}
int main() {
    int x = 1, y = 2;
    swap(x, y);
    std::cout << x << y;
    return 0;
}
答案:D

考点

函数

解题思维

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

常见错误

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

详细解析(节选)

【考点】值传递|引用传递|函数参数机制

🎯 考纲定位:本题考查 GESP 四级 C++ 大纲中"函数参数传递"核心考点,命题人卡住绝大多数考生的弱点——死记 swap 能交换变量,却未理解值传递和引用传递的本质差异。

🧠 解题思维:先看 swap 函数定义,第一个参数 int a 是值传递,第二个参数 int &b 是引用传递。调用 swap(x, y) 时,x 的值被拷贝到局部变量 a,y 的引用被绑定到 b。函数内 a 和 b 的变化不影响 x,但 b 是 y 的引用,所以 y 被修改。main 中 x 保持 1,y 变成 1,输出 11。这一类题的通法是:逐参数检查传递方式,区分值传递和引用传递,追踪变量变化。

🪤 陷阱拆解:A 和 B 是交换后结果,命题人利用考生误以为 a 也是引用传递;C 是 y 不变,利用考生忽略 b 的引用性质;D 是正确答案。最阴险细节是 swap 函数中 a 和 b 传递方式不同,考生容易混淆。如果你只背结论、不理解本质,就会掉进这个陷阱。

🔄 反命题思维:若将 swap 改为两个引用传递,x 和 y 都会交换,输出 21;若改为两个值传递,x 和 y 都不变,输出 12。刷到类似题时,先问自己"命题人想考我什么",是考参数传递方式,还是考函数内部逻辑。

同考点真题

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