关于逗号运算符的疑问?
如题:#include<stdio.h>void main()
{
int a=2,b=4,c=6,x,y;
y=(x=a+b),(b+c);
printf("y=%d,x=%d",y,x);
}
我觉得应该是y=(b+c)=10; x=a+b=6;但我编译后得到的答案却是x=y=6.???????????为什么?请高手指点迷津!我用的visualC++6.0的编绎器
y=(x=a+b),(b+c);这个嘛,首先要知道=比,优先级高,就是先算=表达式再算,表达式
也就是说上面的表达式中 y=(x=a+b),(b+c);应该等价于这样的结合:y=x=6,10C语言提供一种特殊的运算符——逗号运算符。用它将两个表达式连接起来。如:
3+5,6+8
称为逗号表达式,又称为“顺序求值运算符”。逗号表达式的一般形式为
表达式1,表达式2
逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。也就是说,表达式1:y=(x=a+b),表达式2:(b+c),y与表达式2无关 y=(x=a+b),(b+c);这条语句可以拆分成y = x,(b+c),这样看的话楼主是不是可以理解了。如果在这里加上一个括号如下:y=((x=a+b),(b+c));答案就是楼主上面猜的那样了。 本帖最后由 折心灬小轩 于 2014-1-17 21:31 编辑
表达式的值是10,即b+c的值。
x的值与y的值相同,因为x和y的赋值操作对于编译器而言在同一序列点的作用范围内,故括号的作用只是简单地指明在进行表达式求值时,优先计算并赋值给x,并没有影响到y。
希望能帮助到你。 楼主要分请下面两个y=(x=a+b),(b+c); 这个是y=(x=a+b)
y=((x=a+b),(b+c));这个是y=(……),()=第二个表达式也就是b+c
页:
[1]