2.2.5 自增和自减运算符
自增运算符是两个加号:++。
自减运算符是两个减号:--。
这是两个非常重要的运算符,必须要搞清楚。简单地说,这两个运算符的作用就是使变量的值增加1或者减少1,根据表2.6,可以看到,它们都是单目运算符,也就是说,运算对象个数只有一个。
对于自增和自减运算符,在代码中通常像如下这样书写:
上面几行代码中的口诀不太容易理解,下面通过举例的方式介绍。
(1)如果单独写在一行上,那么自增和自减运算符的作用就是把变量自身的值增加1或者减少1。看看下面这段代码:
(2)如果放在一个表达式中使用,又是什么样的情形呢?看看下面这段代码:
这段代码,为什么printf语句输出的结果是“i=4”呢?因为在printf语句中,++运算符出现在变量i的前面,这个自增运算符就属于先加后用,也就是先将i值自身加1变成4,然后将这个结果4作为printf语句的输出值,所以输出的结果是“i=4”。
然后再看看下面这段代码:
这段代码,为什么printf语句输出的结果是“i=3”呢?因为在printf语句中,++运算符出现在变量i的后面,这个自增运算符就属于先用后加,也就是先将当前i的值作为表达式的值供printf语句输出,输出的结果是“i=3”,然后再将i值自身加1变成4。
特别值得注意的是,自增和自减运算符只能用于变量,不能用于常量或者表达式。所以5++、(a+b)--都不合法。
上面提到了一个概念——表达式,表达式就理解为用+、-、*、/等运算符串起来的一个式子,所以上面代码中,出现在printf语句中的++i、i++都是表达式。
在面试中,偶尔会遇到一些非常难为人的考题,看看如下代码:
C编译器在处理表达式中的运算符时,会尽可能多地从左到右将若干字符组成一个运算符。笔者极度不建议像上面这样写代码,代码是用来给人看的,而不是用来难为人的。可以把上面的代码拆成多行来写,这样清晰明了,否则,就不得不仔细查看如表2.6所示的运算符优先级表,认真仔细核对运算符优先级、结合方向等,才能正确计算出这些表达式的值。
自增和自减运算符常用于在循环语句中循环变量自增1或自减1操作,后续讲到循环语句时会再次提及。