c语⾔中逗号运算符和逗号表达式
C语⾔提供⼀种特殊的运算符——逗号运算符。⽤它将两个表达式连接起来。如:
3+5,6+8
称为逗号表达式,⼜称为“顺序求值运算符”。逗号表达式的⼀般形式为
表达式1,表达式2
逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。例如,上⾯的逗号表达式“3+5,6+8”的值为14。⼜如,逗号表达式
a=3*5,a*4
c语言中逗号表达式的用法对此表达式的求解,读者可能会有两种不同的理解:⼀种认为“3*5,a*4” 是⼀个逗号表达式,先求出此逗号表达式的值,如果a的原值为3,则逗号表达式的值为12,将12赋给a,因此最后a的值为12。另⼀种认为:“a=3*5”是⼀个赋值表达式”,“a*4”是另⼀个表达式,⼆者⽤逗号相连,构成⼀个逗号表达式。这两者哪⼀个对呢?赋值运算符的优先级别⾼于逗号运算符,因此应先求解a=3*5(也就是把“a=3*5”作为⼀个表达式)。经计算和赋值后得到a的值为15,然后求解a*4,得60。整个逗号表达式的值为60。
⼀个逗号表达式⼜可以与另⼀个表达式组成⼀个新的逗号表达式,如(a=3*5,a*4),a+5 先计算出a的值等于15,再进⾏a*4的运算得60(但a值未变,仍为15),再进⾏a+5得20,即整个表达式的值为20。
逗号表达式的⼀般形式可以扩展为
表达式1,表达式2,表达式3……表达式n
它的值为表达式n的值。
逗号运算符是所有运算符中级别最低的。因此,下⾯两个表达式的作⽤是不同的:
① x=(a=3,6*3)
② x=a=3,6*a
第①个是⼀个赋值表达式,将⼀个逗号表达式的值赋给x,x的值等于18。第②个是逗号表达式,它包括⼀个赋值表达式和⼀个算术表达式,x的值为3。
其实,逗号表达式⽆⾮是把若⼲个表达式“串联”起来。在许多情况下,使⽤逗号表达式的⽬的只是想
分别得到各个表达式的值,⽽并⾮⼀定需要得到和使⽤整个逗号表达式的值,逗号表达式最常⽤于循环语句(for语句)中.
请注意并不是任何地⽅出现的逗号都是作为逗号运算符。例如函数参数也是⽤逗号来间隔的。如
printf("%d,%d,%d",a,b,c);
上⼀⾏中的“a,b,c”并不是⼀个逗号表达式,它是printf函数的3个参数,参数间⽤逗号间隔。
如果改写为
printf("%d,%d,%d",(a,b,c),b,c);
则“(a,b,c)”是⼀个逗号表达式,它的值等于c的值。括弧内的逗号不是参数间的分隔符⽽是逗号运算符。括弧中的内容是⼀个整体,作为printf函数的⼀个参数。
C语⾔表达能⼒强,其中⼀个重要⽅⾯就在于它的表达式类型丰富,运算符功能强,因⽽c使⽤灵活,适应性强
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论