C语言 逗号运算符和逗号表达式

在C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接起来组成一个表达式, 称为逗号表达式。
其一般形式为:
表达式1,表达式2
其求值过程是分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值。
【例3.19】
main(){
int a=2,b=4,c=6,x,y;
y=(x=a+b),(b+c);
printf("y=%d,x=%d",y,x);
}

程序运行后,为何输出结果为 y=6,x=6

这是符号优先级的问题。
优先级从上到下,然后看结合方向,不好记。顺便再看看
运算符 解释 结合方式
() [] -> . 括号(函数等),数组,两种结构成员访问 由左向右
! ~ ++ -- + - * & (类型) sizeof否定,按位否定,增量,减量,正负号,
间接,取地址,类型转换,求大小 由右向左
* / % 乘,除,取模 由左向右
+ - 加,减 由左向右
<< >> 左移,右移 由左向右
< <= >= > 小于,小于等于,大于等于,大于 由左向右
== != 等于,不等于 由左向右
& 按位与 由左向右
^ 按位异或 由左向右
| 按位或 由左向右
&& 逻辑与 由左向右
|| 逻辑或 由左向右
? : 条件 由右向左
= += -= *= /= &= ^= |= <<= >>=各种赋值 由右向左
, 逗号(顺序) 由左向右

y=(x=a+b),(b+c);
这条语句执行顺序是
1.括号() 执行(x=a+b) 和 (b+c)
2.赋值 = 执行y = (x=a+b)
3.逗号 , 最后再执行逗号后面的语句(b+c)

“其求值过程是分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值”
这句话的意思是
如果只有单一的语句a,b 那么这条语句的值就是b表达式的值
x=a,b;的意思就是把x=a当成一条语句,最后这个表达式的值还是b的值,但是里面的变量x等于a
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-09-06
说出来也许你很困惑

y=(x=a+b)
这里,把a+b的值赋给x
然后再把x赋给y
然后输出
y=(x=a+b),(b+c);
再看这个,
a,b,c都赋有初值
并不是变量
一旦把常量赋给变量后,就不需再把逗号后面的常量赋给前面的变量了
如果是这样
y=(x=(a+b),x*5)
那么y就等于30,x=6了

参考资料:如果您的回答是从其他地方引用,请表明出处

本回答被网友采纳
第2个回答  2009-09-06
赋值运算符(=)的优先级要高于逗号(,)优先级的所以, y=(x=a+b),(b+c);
的意思是y=(x=a+b); y,(b+c);
所以结果为 y=6,x=6
第3个回答  2009-09-11
其实这个问题很简单,根本就没有用到逗号运算,先算(x=a+b),就能得出X的值,接着就是把这个值赋值给y,所以就是你的那个结果
相似回答