GESP 四级 · GESP 202512 C++ 四级 第 19 题

判断题 · 答案 A · 考点:函数

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

题目

执行下面程序后,变量 a 的值会变成 15。

void add(int &x){
    x += 10;
}

int a = 5;
add(a);
答案:A

考点

函数

解题思维

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

常见错误

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

详细解析(节选)

【考点】引用传递|函数参数|变量作用域

1. 🎯 考纲定位 GESP 四级《编程基础》模块,"函数与参数"子考点。命题人专门挑这道题,就是要卡住那些死记"函数参数传值"口诀、却对"引用"二字毫无感知的考生——C++ 里 & 出现在参数声明里,性质就完全变了,这是四级到五级的关键分水岭。

2. 🧠 解题思维 看到 add(int &x) 先别急着看函数体。重点在参数声明里的 &符号:x 不是局部变量,而是对 a 的引用(别名)。调用 add(a) 时,形参 x 和实参 a 绑定在一起,函数内部对 x 做的任何修改都会原样作用到 a 上。执行 x += 10; 这一步,本质是 a = a + 10;,a 从 5 变成 15,函数返回后 a 保持 15。这就是引用传递的完整链条。

3. 🪤 陷阱拆解 A 选项是陷阱题,但陷阱不在"没理解引用",而在"过度联想"。很多考生看到 add(a) 会下意识想"a 在函数里被改了,那 a 的值会不会变回原值"——这是把引用当成"临时副本"的错觉。再比如,有人会把 & 符号误读为"按位与",以为 x += 10; 是位运算,其实 & 在声明位置就是引用声明,在表达式位置才是按位与,上下文决定含义。只背结论不看语法位置,必掉坑。

4. 🔄 反命题思维 命题人会怎么变这道题?把参数改成 add(int x) 或 add(const int &x),问 a 的值是多少?答案是 5。再改函数体成 x = 10; 呢?答案还是 15,但修改逻辑变了——从增量改成赋值。刷到这类题先问自己:形参是值传还是引用传?引用会不会被 const 锁定?函数体改的是 x 还是 a?这三问答对,四级函数题基本就稳了。

同考点真题

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