
上QQ阅读APP看书,第一时间看更新
2.3.5 逗号运算符及其表达式
逗号在C语言中可以作为分隔符,又可以作为运算符。逗号运算符又称顺序求值运算符,用它可将两个表达式连接起来,它的优先级最低。
逗号表达式的一般形式如下:
表达式1,表达式2,表达式3,…,表达式n
在执行时,上述表达式的求解过程为:先计算表达式1的值,然后依次计算其后面的各个表达式的值,最后求出表达式n的值,并将最后一个表达式的值作为整个逗号表达式的值。逗号运算符如表2-12所示。
表2-12 逗号运算符

在只允许出现一个表达式的地方出现多个表达式时,常采用逗号表达式的形式。
注意:逗号运算符所构成的表达式是按顺序执行的。
【例2.11】逗号运算符的使用。
(1)a=3*5,a*4
(2)x=(a=3,6*3)
(3)x=a=3,6*a
上述表达式的计算结果分别为:
表达式(1)先计算a=3*5,结果为15;再计算a*4,结果为60,整个表达式的值取最后表达式的值,为60。
表达式(2)是一个赋值表达式,将一个逗号表达式的值赋给x,x的值等于3*6,即18。
表达式(3)是一个逗号表达式,它包括一个赋值表达式和一个算术表达式。赋值运算的优先级高于逗号运算,所以先计算a=3,x=a,得值x=3;再计算6*a,结果为18,整个表达式的值取后面的表达式的值,为18。
思考:上面的表达式(2)和(3)有什么区别?
事实上,逗号表达式无非是把若干表达式“串联”起来。在许多情况下,使用逗号表达式的目的只是想分别得到各个表达式的值,而并非一定需要得到和使用整个逗号表达式的值,逗号表达式最常用于循环语句中,详见第5章。
注意:在计算表达式时,要考虑每一个运算符的优先级、结合方向和结果类型。算术运算符的优先级高于赋值运算符,赋值运算符的优先级又高于逗号运算符。