如果是((x=a+b),(b+c))实际上可以看成(6,10)整个逗号表达式的值应该是10
但这是错的,这儿还有赋值运算符。赋值运算符的优先级是14,而逗号表达式的优先级是15,也就是说上面的表达式中
y=(x=a+b),(b+c);应该等价于这样的结合:y=x,10;如果这样写的话,则答案很清晰,为:6
提示:据我统计,这种类型的题目错误率超过70%.
有疑问请hi我:)
逗号表达式的运算级最低,比赋值运算符级别还低。
所以
y=(x=a+b),(b+c);
先算x=a+b=6,再y=x=6;而后面的b+c不影响x和y的值。
所以最终x,y的值都是6.
只不过
y=(x=a+b),(b+c);这整个式子的值是b+c=10而已。
如果是y=((x=a+b),(b+c));
那么才结果是x=6,y=b+c=10
在c/c++中逗号表达式的运算结果是逗号之前的部分,逗号后面的你可以理解顺便做的工作
在你的代码中
y=(x=a+b),(b+c);
这一句中,运算顺序
(1).x=a+b得到x=6
(2)b+c
(3)y=x=a+b=6
所以结果自然就是y和x都等于6了
y=(x=a+b),(b+c);
包括一个赋值表达式,和一个算术表达式,y的值是6,整个表达式的值为10.
也就是说
y=((x=a+b),(b+c));时
y的值为10.
自己再试下咯。