2.7 自加、自减运算符和逗号运算符
2.7.1 自加运算符“++”和自减运算符“--”
(1)自加运算符“++”和自减运算符“--”的运算结果是使运算对象的值增1或减1。如i++,相当于i=i+1;i--,相当于i=i-1。因此,自加或自减运算本身也是一种赋值运算。
(2)运算符“++”和“--”是单目运算符,运算对象可以是整型变量也可以是实型变量,但不能是常量或表达式。因为不能给常量或表达式赋值。因此,如++3,(i+j)--等都是不合法的。
(3)用自加或自减运算符构成表达式时1既可以前缀形式出现,也可以后缀形式出现。例如:++i,--i,i++,i--等都是合法的表达式。无论是作为前缀运算符还是作为后级运算符,对于变量本身来说自增1或自减1都具有相同的效果,但作为表达式来说却有着不同的值。
例如,若变量i为int类型,且已有值为5。若表达式为++i,则先进行i增1运算,i的值为6,表达式的值也为6;若表达式为--i,则先进行i减1运算,i的值为4,表达式的值也为4;若表达式为i++,则表达式先取i的值为5,然后i进行增1运算,使i中的值为6;若表达式为i--,则表达式先取i的值为5,然后i进行减1运算,使i中的值为4。
(4)运算符“++”和“--”的结合方向是“自右至左”。
例如有一表达式-i++,其中i的原值为3。由于负号运算符与自加运算符的优先级相同,结合方向是“自右至左”,即相当于对表达式-(i++)进行运算,此时自加运算符“++”为后缀运算符,(i++)的值为3,因此-(i++)的值为-3,然后i自增为4。
(5)不要在一个表达式中对同一个变量进行多次诸如i++或++i等运算,例如写成:i++*++i+i--*--i,这种表达式不仅可读性差,而且不同的编译系统对这样的表达式将做不同的解释.进行不同的处理,因而所得结果也各不相同。
2.7.2 逗号运算符和逗号表达式
“,”是C语言提供的一种特殊运算符,用逗号将表达式连接起来的式子称为逗号表达式。逗号表达式的一般形式为:
表达式1,表达式2,……,表达式n。
说明:
(1)逗号运算符的结合性为从左到右,因此逗号表达式将从左到右进行运算。即,先计算表达式1,然后计算表达式2,依次进行,最后计算表达式n。最后一个表达式的值就是此逗号表达式的值。例如:(i=3,i++,++i,i+5)这个逗号表达式的值是10,i的值为5。
(2)在所有运算符中,逗号运算符的优先级最低。