鱼C论坛

 找回密码
 立即注册
查看: 1484|回复: 4

[已解决]关于逗号运算符的问题

[复制链接]
发表于 2021-6-8 21:22:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
int x, b;
        b=(x = 4 * 5, x * 5), x + 25;
        printf("%d,%d\n", x,b);
        system("pause");
按上面的代码,我认为x的值是20,x*5没有赋值,然后b的值应该是45,因为逗号运算将最右面的表达式结果作为整个逗号表达式的结果,但是实际输出结果不是这样子,而是20,100。后来我把括号的位置改变了"b=(x = 4 * 5, x * 5, x + 25);"输出结果就是20,45了。这个是跟优先级有关吗?一条语句里同时包含小括号里面的表达式,和逗号后面的表达式,整个表达式的值以小括号的值作为最终结果吗?
最佳答案
2021-6-8 22:33:36
这肯定跟优先级有关系的
优先级是  括号>赋值符号>逗号  
所以第一种会先算(x = 4 * 5, x * 5)   括号里再根据优先级 乘号>赋值   结果就是给x赋值20,然后计算x * 5的值  括号里完事就轮到给b赋值了  然后再计算x + 25
第二种  同样的分析  先算括号(x = 4 * 5, x * 5, x + 25)  括号里再按优先级计算 给x赋值20,然后计算x * 5的值  计算x + 25的值  括号里完事就到给b赋值了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-8 22:33:36 | 显示全部楼层    本楼为最佳答案   
这肯定跟优先级有关系的
优先级是  括号>赋值符号>逗号  
所以第一种会先算(x = 4 * 5, x * 5)   括号里再根据优先级 乘号>赋值   结果就是给x赋值20,然后计算x * 5的值  括号里完事就轮到给b赋值了  然后再计算x + 25
第二种  同样的分析  先算括号(x = 4 * 5, x * 5, x + 25)  括号里再按优先级计算 给x赋值20,然后计算x * 5的值  计算x + 25的值  括号里完事就到给b赋值了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-6-8 23:27:42 | 显示全部楼层
中国人的习惯就是从左到右,括号里的运算也一样,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-8 23:34:34 | 显示全部楼层
中国人的习惯就是从左到右,括号里的运算也一样,

  b=   (x = 4 * 5, x * 5)  ,    x + 25;  
1.    b=x=4*5                            所以此时X=20,b=20
2.    b=x*5=20*5=100               所以x=20,b=100

    b=(x = 4 * 5, x * 5, x + 25)   
1.   b=x=4*5=20                       所以此时X=20,b=20
2.   b=x*5=20*5=100                所以此时X=20,b=100
3.   b=x+25=20+25=45              所以此时x=20,b=45

你可以验证一下,把x*5和x+25换一下位置,应该是这样
  b=(x = 4 * 5, x * 5, x + 25)               x=20,b=45
  b=(x = 4 * 5, x +25, x * 5)                x=20,b=100
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-6-8 23:53:40 | 显示全部楼层
有多个 都以最右边为值  
,左边的表达式也会执行
(x = 4 * 5, x * 5, x + 25)中
  x * 5   
执行完是个值 然后丢弃了 x本身并没有改变
以最右边为整个表达式的值   就是  20+25 45
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 14:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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