17. C含义与使用说明

17. C含义与使用说明

设有 C 语言说明语句 int a=15, b=17, c;,执行表达式 c=a++ + b--; 后,结果是:c 的值为 32,a 的值为 16,b 的值为 16。理解这道题的关键,是区分后置自增、自减表达式“参与运算时的值”和“执行后变量的新值”。

逐步看表达式的计算

a++ 是后置自增:先把 a 原来的值 15 用于当前加法,再让 a 增加 1。因此,a++ 对本次加法贡献的是 15,而表达式执行后 a 变为 16。

b-- 是后置自减:先把 b 原来的值 17 用于当前加法,再让 b 减少 1。因此,b-- 对本次加法贡献的是 17,而表达式执行后 b 变为 16。

加法使用两个操作数的旧值,计算 15+17,得到 32;赋值运算再将这个结果存入 c。计算过程可以整理为下表:

变量或表达式运算前的变量值参与加法的值运算后的变量值
a++a=1515a=16
b--b=1717b=16
c尚未赋值15+17=32c=32

为什么不是 33,也不是 31

容易出错的地方,是看到自增、自减符号后,立即把变量的新值代入加法。这里的两个运算符都写在变量后面,所以它们是后置运算符。后置运算符先提供变量原来的值,再改变变量本身;因此,加法不会用 a 更新后的 16,也不会用 b 更新后的 16。正确的加法是 15+17,而不是 16+17 或 15+16。

也不能把题目中的后置运算符误读成前置运算符。若写成 ++a,自增后的值会参与所在表达式;若写成 --b,自减后的值会参与所在表达式。前置和后置的区别不在于变量最终是否改变——两者都会改变变量——而在于表达式本身取到的是改变前还是改变后的值。

结果汇总

整条语句 c=a++ + b--; 执行完成后,三个变量的最终状态是:

  • a:由 15 自增为 16;
  • b:由 17 自减为 16;
  • c:接收两个旧值之和,等于 32。

所以,若题目要求填写表达式结果,应答 32;若要求写出执行后的变量值,则应答 a=16、b=16、c=32。读这类 C 语言表达式时,先分别标出后置运算符提供的旧值,再计算算术结果,最后更新变量并完成赋值,就能避免把中间使用值与最终变量值混为一谈。

[责任编辑:杨照]

为您推荐