GESP 七级 · GESP 202506 C++ 七级 第 2 题

选择题 · 答案 C

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

题目

已知 a 为 int 类型变量,p 为 int * 类型变量,下列赋值语句不符合语法的是( )。

答案:C

解题思维

仔细审题,明确已知条件和所求目标,运用相关知识点逐项分析。

常见错误

审题时注意题目要求(选正确还是选错误),避免因审题不清失分。涉及代码的题目要逐行分析变量变化。

详细解析(节选)

【考点】指针运算|指针赋值|类型不匹配

🎯 考纲定位 本题位于 GESP 七级《C++程序设计》指针章节。命题人精准卡住"指针运算返回临时值"这一普遍盲区——75% 考生误以为 p + a 是普通变量,能像 p = p + a 那样正常赋值,可惜 C++ 语法不允许把临时指针当左值。

🧠 解题思维 核心是 C++ 赋值规则:左值必须为可修改对象。逐项分析——A 取指针运算后解引用(int),右侧解引用(int),类型匹配 ✓;B 同理取 int,右侧 int ✓;C 左侧 p + a 是计算结果(rvalue 右值),右侧 p 是左值,试图把变量赋给临时指针,违反语法 ✗;D 左侧左值指针,右侧右值指针,合法 ✓。

🪤 陷阱拆解 错误选项 C 利用的是"指针运算结果可以赋值"的直觉误导。命题人刻意把 p + a = p 写成看似对称的形式,诱导考生忽略 C++ 中只有变量、解引用、数组下标等左值能出现在赋值左侧,而 p + a 这类表达式永远是右值。如果你只背"指针运算规则"而不理解左值右值本质,必然掉坑。

🔄 反命题思维 若改为 *(p + a) = p;,左侧解引用后是 int,右侧是指针,类型不匹配,错误点从"左值右值"变成"类型"。刷到此类题,先问自己:赋值左侧是左值吗?

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