如果 a 为 char 类型的变量,且 a 的值为 '2',则下列哪条语句执行后,a 的值不会变为 '3'?
这题考变量赋值和表达式语句的区别。拿到题先别急着算,把每个选项按行读一遍,核心就盯住有没有等号或者自增运算符,只有真正把结果存回变量的操作,a 才会变。
学生最容易犯的错就是把 a + 1 当成赋值,以为执行了就能改值;或者看到自增就以为它和 a + 1 一样只是算不算,分不清前缀自增会回赋。还有个坑是选项 C,有人会觉得 1 + a 和 a + 1 不一样,其实 char 类型下它们完全等价,都会让 a 变成 3,别被加法顺序绕进去。
【考点】变量赋值与表达式语句的区别、char 类型运算、自增运算符语义
这题是 GESP 二级很典型的“语法陷阱”题。命题人就是想卡住那些“看到运算符就以为会运算”的同学,把 a 的值从 '2' 变成 '3' 的关键,不在于你有没有用 + 号,而在于有没有把运算结果存回去。C++ 里,只有赋值语句(含 = 或自增/自减)才会改变变量值,纯表达式就算出结果也是扔进垃圾桶,变量原封不动。
咱们逐项看:
a = a + 1;:这是标准的赋值语句。先算 '2' + 1,ASCII 码上就是 3,再赋给 a,a 稳稳变成 '3'。a + 1;:注意,这里没有等号!它只是一个表达式语句。编译器会老老实实算出 '2' + 1 的结果,但因为这个结果没被任何变量接收,直接丢弃了。a 还是原来的 '2',这就是正确答案。a = 1 + a;:虽然加法顺序反了,但本质和 A 一样,还是赋值语句。1 + '2' 还是 '3',a 照样变。++a;:这是前缀自增,语义就是“先加 1 再返回新值”,它本身就是一个赋值操作,a 直接变成 '3'。所以只有 B 不会改 a 的值。
命题人挖坑的点很明确: 1. 利用“表达式会计算”的错觉,让学生误以为 a + 1 也能改值; 2. 用自增运算符 D 来测试你是否真正理解“改值”的机制,而不是死记“有 + 就变”; 3. 用 C 选项的加法顺序来试探你是否知道 char 类型下加法交换律成立,避免你只盯着“a + 1”这个形式。
避坑指南:以后看到类似题,先问自己“这条语句有没有把结果存回变量?”如果没有等号又没有自增/自减,那变量绝对不变。别被运算符迷惑,也别纠结加法顺序,抓住“赋值”这个核心就稳了。
考频与趋势:从题库数据看,基础语法模块在 GESP 二级里非常高频,2023 年考了 287 题,2024 年冲到 413 题,2025 年 401 题,2026 年 109 题,说明这类“变量与表达式”的辨析是二级必考的重灾区。变量与常量专题在二级也占 15 题,基本数据类型专题二级考了 48 题,三者叠加,这类题未来大概率会继续以单选题形式出现,偶尔会结合输入输出或数组下标做变式,但核心还是“有没有赋值”。暂无足够依据预测具体年份分布,但趋势是稳中有升,提醒同学务必把赋值语句和表达式语句的区分练熟。