C语⾔逗号运算符和逗号表达式
⼀、逗号运算符
在C语⾔中,逗号“,”的⽤法有两种:⼀种是⽤作分隔符,另⼀种是⽤作运算符。
在变量声明语句、函数调⽤语句等场合,逗号是作为分隔符使⽤的。
例如:
int a,b,c;
scanf('%f%f%f',&f1,&f2,&f3);
C语⾔还允许⽤逗号连接表达式。例如x=5.6,y=2.1,10+x,x+y这⾥⽤三个逗号运算符将四个算术表达式连接成⼀个逗号表达式。
⼆、逗号表达式
形式:表达式1,表达式2,表达式3,...,表达式n
例:
a=2*6,a-4,a+15;
当逗号作为运算符使⽤时是⼀个双⽬运算符,其运算优先级是所有运算符中最低的。逗号运算符的运算顺序是⾃左向右的,因此上述赋值语句的求值顺序为:先计算2*6并赋予a(结果是a=12),再计算a-4(只计算,不赋值),最后计算a+15(只计算,不赋值),最终以27作为整个逗号表达式的值。请注意,后⾯两个表达式的值仅作了计算,⽽并没有赋给a,所以a的值仍然为12。
有时候使⽤逗号表达式的⽬的仅仅是为了得到各个表达式的值,⽽并⾮要得到真个逗号表达式的值。
例:
逗号表达式的运算顺序
t=a,a=b,b=t;
此逗号表达式的⽬的是实现变量a,b值互换,⽽不是使⽤整个表达式的值。
例:
由于逗号运算符的优先级最低,因此x=5+5,10+10与x=(5+5,10+10)的作⽤不同,前者是x被赋值为10,⽽整个逗号表达式的值为20;后者由于增加了⼀对括号,使10+10作为整个表达式的值并赋予变量x,因此x的值为20。
例:
逗号表达式(a=3*5,a*4),a+15 的运算顺序为:将3*5的结果15赋给变量a,再计算括号内的第⼆个表达式a*4的值,结果为60,该整数60虽然作为括号所构成的表达式的值,但是a的值仍然是15,因此最后计算a+15时,结果为30。
例:
int j=5;
a=(a=j+1,a+2,a+3);
该赋值语句的执⾏顺序为:先对a变量赋值6,再计算a+2得8,再计算a+3得9,最后将9作为整个逗号表达式的值付给变量a,使a重新赋值为9。如果将⼀对括号
去掉,a的值为6。
例:
int x ,y;
y=(x=1,++x,x+2);
该赋值语句的执⾏顺序为:x被赋值为1,x⾃增1得2,再计算x+2得4,4作为整个逗号表达式的值付给变量y,因此y被赋值为4。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。