GESP 四级 · GESP 202606 C++ 四级 第 16 题

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

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

题目

运行以下程序后,变量 a 的值最终会变为 $20$。

void modify(int *p) {
    *p = *p + 10;
}
int main() {
    int a = 10;
    modify(&a);
    return 0;
}
答案:A

考点

函数

解题思维

在纸上逐行模拟程序执行,重点追踪变量值变化和输出语句。按照题目输入代入计算。正确答案A。

常见错误

关键提醒:C++中的^是异或运算符,不是乘方!2^5=7而非32。这是最高频的错误。

详细解析(节选)

【考点】指针传递|地址运算|函数参数

🎯 考纲定位:GESP 四级 C++ 模块,指针与地址运算。命题人卡住的是"指针传参是值传递还是引用传递"的混淆——四级才正式引入指针,学生常把 *p 当成局部变量复制,误以为函数修的是副本。

🧠 解题思维:看到函数形参是 int *p 立刻警觉——这是指针传参。主函数 modify(&a) 把 a 的地址传给 p,函数内 *p = *p + 10 就是直接操作 a 的内存。返回值看 a 是否被修改:初始 10,加 10 后变成 20,选项 A 正确。这类题通法:函数参数里带 * 或 & 的,一定在操作原变量,别被"局部变量"字样迷惑。

🪤 陷阱拆解:错误选项 B 的陷阱在于把 p 当成局部变量复制了 a,忽略了 p 存的是地址。更阴险的是,函数形参是 int *p,C++ 里指针传参本质是值传递,但传递的值是地址,所以 modify 能改 a。如果你只背"指针传参是引用"这种口诀,没理解地址传递的本质,看到 modify(&a) 就本能觉得"哦,传的是值,a 没变",掉进这个坑。

🔄 反命题思维:若把 modify 改成 void modify(int p),a 就不会变——命题人常在这里设坑。再比如,如果 modify 里写 *p = 20,那 a 直接变成 20,但题目里是 *p = *p + 10,强调增量,是考你是否理解指针操作是原址修改。刷到类似题先问:函数参数是值还是地址?修的是副本还是原变量?

同考点真题

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