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

判断题 · 答案 A

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

题目

小杨正在调试他的温度传感器程序,其中变量 x 保存当前温度。下面这段代码运行后,变量 x 的值变成了 8。

int x = 5;
int *p = &x;
*p = *p + 3;
答案:A

解题思维

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

常见错误

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

详细解析(节选)

【考点】指针解引用|指针算术运算|内存间接访问

🎯 考纲定位(考点定位) GESP 四级 C++ 大纲"基础语法"模块明确要求掌握指针解引用与赋值,命题人专挑"指针间接修改原变量"这一薄弱点设卡,大量考生只懂变量赋值却误以为 *p = *p + 3 是普通算术表达式从而掉进陷阱。四级常考指针与数组的关系,本题正是利用"指针间接访问"这一核心概念来区分只会写 x = x + 3 的考生。

🧠 解题思维(拆解与通法) 看到 int x = 5; int *p = &x; 先建立内存映射:x 占 4 字节,p 存其地址。*p 即 x 的值,*p = *p + 3 是赋值表达式,右值先计算(5+3=8)再写回 x 所在内存,故 x 最终为 8。通法:凡 *p = *p + k 型,本质等价于 x = x + k,只需用指针间接访问即可。

🪤 陷阱拆解(命题人的套路) 选项 B 错误源于"把指针运算当成普通算术"的误区,命题人刻意用 *p = *p + 3 这一赋值形式,而非返回新值的表达式,利用考生对"间接修改"语义的模糊;最阴险的细节是"= 号"在此处不是比较而是赋值,若只背结论不理解本质,就会误判结果。

🔄 反命题思维(教练升华) 若把 *p = *p + 3 换成 p = p + 3(指针算术),则 p 指向 x 后 3 个字节处,x 不变,答案为 5;若再加 *p = *p + 3; 再问 x,x 仍为 8。刷到类似题时,先问自己"命题人想考我什么"——指针的间接性和内存修改,而非单纯算术计算。

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