鱼C论坛

 找回密码
 立即注册
查看: 2585|回复: 0

关于逗号运算符的疑问?

[复制链接]
发表于 2014-1-15 14:08:17 | 显示全部楼层 |阅读模式
1鱼币
如题:#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=6,10也就是说,表达式1:y=(x=a+b),表达式2:(b+c),y与表达式2无关
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-15 14:08:18 | 显示全部楼层
y=(x=a+b),(b+c);
这个嘛,首先要知道=比,优先级高,就是先算=表达式再算,表达式
也就是说上面的表达式中 y=(x=a+b),(b+c);应该等价于这样的结合:y=x=6,10
C语言提供一种特殊的运算符——逗号运算符。用它将两个表达式连接起来。如:

  3+5,6+8

称为逗号表达式,又称为“顺序求值运算符”。逗号表达式的一般形式为

         表达式1,表达式2

逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。
也就是说,表达式1:y=(x=a+b),表达式2:(b+c),y与表达式2无关

评分

参与人数 1鱼币 +5 收起 理由
隨鈊乄鎍慾 + 5 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-15 17:10:51 | 显示全部楼层
y=(x=a+b),(b+c);
这条语句可以拆分成
y = x,(b+c)
,这样看的话楼主是不是可以理解了。如果在这里加上一个括号如下:
y=((x=a+b),(b+c));
答案就是楼主上面猜的那样了。

评分

参与人数 1鱼币 +1 收起 理由
隨鈊乄鎍慾 + 1 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-17 21:29:19 | 显示全部楼层
本帖最后由 折心灬小轩 于 2014-1-17 21:31 编辑

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

希望能帮助到你。

评分

参与人数 1鱼币 +1 收起 理由
隨鈊乄鎍慾 + 1 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 23:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表