C语言学习指南:从规范编程到专业级开发
上QQ阅读APP看书,第一时间看更新

5.12 增量运算符

除了复合赋值运算符之外,C语言还提供了几个更便捷的运算符,可以进一步缩短代码的篇幅。这就是自增运算符与自减运算符。

counter=counter+1;这样的语句可以用复合赋值运算符改写得简单一些,也就是写成counter+=1;。这种运算相当常见,尤其是在操作计数器或下标(索引)的时候更是经常用到,于是C语言提供了一种更简单的写法,让我们不用指出增量1,而是可以直接写成counter++;或++counter;,这就是一元增量运算符。

这两种写法都会让counter的值变得比原来大1。

C语言提供了下面两种一元增量运算符:

□++自增1,可以放在变量前面,也可以放在变量后面

□--自减1,可以放在变量前面,也可以放在变量后面

后置增量运算符与前置增量运算符的区别

增量运算符写在变量的前面还是写在变量的后面会对程序计算表达式的办法产生微妙的影响。

如果把++写在变量的前面,那么程序会先让变量自增,然后再求表达式的值。如果把++写在变量的后面,那么程序会先求表达式的值,然后再让变量自增。

下面举例来说明区别。

在这个例子里面,我们给变量设定一个取值,然后分别采用前置增量运算符与后置增量运算符操作这个变量。最后,我们再采用一种更容易预测出结果的写法来操作该变量,也就是把自增操作单独放在一条语句里面,这样就能够确保程序的求值结果总是与我们预想的相同:

录入这段代码,并将其保存成prefixpostfix.c文件,然后编译并运行程序。你应该会看到类似下面这样的输出结果。

从输出的值里面,我们可以体会到在通过printf()函数打印变量值的时候前置写法与后置写法的效果有何区别。前置自增运算符会让程序先给变量做自增,然后再把变量值传给printf()函数,后置自增运算符则会让程序把变量值先传给printf()函数,然后再对该变量做自增。另外我们也注意到,如果把自增操作单独放到一条语句里面执行,那么就不用担心这个问题了,因为无论那条语句用的是前置自增还是后置自增,接下来的那条printf()语句使用的都是自增之后的值。

有些程序员在用C语言写代码时喜欢把许多表达式与运算都挤在同一条语句里面,其实并没有充足的理由促使我们这样做。笔者阅读这样的代码时经常容易看花眼。不同的编译器处理前置与后置的自增/自减运算符所用的做法可能有微妙区别,而且以后我们有可能要修改这些表达式,因此,把它们全都挤在一行代码里面是不太好的。为了避开由自增运算符的前置或后置所造成的困扰,我们最好把自增操作单独放到一行里面,并在必要时通过括号来明确表达自己想要的求值顺序(这个话题5.13节会讲到)。