隨鈊乄鎍慾 发表于 2014-1-15 14:08:17

关于逗号运算符的疑问?

如题:#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的编绎器

神释 发表于 2014-1-15 14:08:18

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无关

小亮1201 发表于 2014-1-15 17:10:51

y=(x=a+b),(b+c);这条语句可以拆分成y = x,(b+c),这样看的话楼主是不是可以理解了。如果在这里加上一个括号如下:y=((x=a+b),(b+c));答案就是楼主上面猜的那样了。

折心灬小轩 发表于 2014-1-17 21:29:19

本帖最后由 折心灬小轩 于 2014-1-17 21:31 编辑

表达式的值是10,即b+c的值。
x的值与y的值相同,因为x和y的赋值操作对于编译器而言在同一序列点的作用范围内,故括号的作用只是简单地指明在进行表达式求值时,优先计算并赋值给x,并没有影响到y。

希望能帮助到你。

神释 发表于 2014-1-17 22:35:26

楼主要分请下面两个y=(x=a+b),(b+c);    这个是y=(x=a+b)

y=((x=a+b),(b+c));这个是y=(……),()=第二个表达式也就是b+c
页: [1]
查看完整版本: 关于逗号运算符的疑问?