鱼C论坛

 找回密码
 立即注册
查看: 3440|回复: 6

关于逗号运算符

[复制链接]
头像被屏蔽
发表于 2012-5-18 11:36:22 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-5-18 19:03:29 | 显示全部楼层
y=(x=a+b),(b+c)
等价于
(y=(x=a+b)),(b+c)
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-5-18 23:15:20 | 显示全部楼层
好迷糊~~:dizzy:
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-5-20 19:53:41 | 显示全部楼层
甲鱼哥的视频里面这里没有说清楚,他只是说一个取右值。
诚然,都好运算符确实是取右值,但是也要搞清楚一点,就是:运算符的优先级:逗号运算符的优先级最低!
y=(x=a+b),(b+c); 由于赋值运算符比逗号运算符优先级高,所以,先执行y=(x=a+b),再执行(b+c),即此语句相当于(y=(x=a+b)),(b+c); 所以y的值为6.
但是 如果y=((x=a+b),(b+c));因为括号的优先级比逗号运算符高,所以取右值,y=(b+c),即y的值为8
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-5-20 20:20:33 | 显示全部楼层
路过学习了
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-5-21 20:57:40 | 显示全部楼层
这里涉及一个知识点,就是符号优先级的问题。你可以查下书本的最后几页,逗号“,”的优先级是最低的了。

所以,y=(x=a+b),(b+c)这个式子中,求值的顺序为先求a+b,值为6,然后赋值给x,所以x=6,然后x=6的值赋值给y,y=x=6.

至于最后的结果,要输出的是x和y的值,当然都是6了  如果改成  printf("%d\n",(y=(x=a+b),(b+c))),答案也许是你想要的10
小甲鱼最新课程 -> https://ilovefishc.com
头像被屏蔽
 楼主| 发表于 2012-5-21 22:30:36 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-9-22 02:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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