鱼C论坛

 找回密码
 立即注册
查看: 2245|回复: 3

[已解决]求助逗号运算符

[复制链接]
发表于 2023-2-20 20:15:30 | 显示全部楼层 |阅读模式

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

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

x
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应该等于10吧 为什么我运行得出y=x=6
是我的逗号运算符用的不对吗
最佳答案
2023-2-20 21:00:50
你的代码中逗号运算符确实没有按照你预期的方式工作,这是因为逗号运算符的优先级比较低,且从左到右结合。在这个例子中,逗号运算符会先计算(x=a+b),这会将x赋值为6,然后逗号运算符会计算(b+c),并将计算结果10赋值给y。因此,最终的输出是y=10,x=6。

如果你想让逗号运算符按照你的预期工作,可以使用括号将(b+c)括起来,以提高它的优先级,例如:
y = (x = a + b, b + c);
这样,逗号运算符将首先计算(x=a+b),将x赋值为6,然后将(b+c)作为整个逗号运算符的计算结果,将其赋值给y,因此最终的输出将是y=10,x=6。

希望这可以帮助你理解逗号运算符的工作方式。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-20 20:47:34 | 显示全部楼层
(y=(x=a+b)),((b+c));
实际上这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-2-20 20:48:05 | 显示全部楼层
本帖最后由 两手空空儿 于 2023-2-20 20:55 编辑

y=(x=a+b),(b+c);  
等效为:
y=(x=a+b);
(b+c);
b+c 这句会执行,但是对执行完的结果什么都没有做就丢掉了,所以 这句写与不写都没有改变什么
所以 x 和 y 都是6,
y=10你是怎么算的呢?
“,”的优先级最低,在 y=x,10; 这一句的时候,先执行 “=”, 后执行 “,”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-20 21:00:50 | 显示全部楼层    本楼为最佳答案   
你的代码中逗号运算符确实没有按照你预期的方式工作,这是因为逗号运算符的优先级比较低,且从左到右结合。在这个例子中,逗号运算符会先计算(x=a+b),这会将x赋值为6,然后逗号运算符会计算(b+c),并将计算结果10赋值给y。因此,最终的输出是y=10,x=6。

如果你想让逗号运算符按照你的预期工作,可以使用括号将(b+c)括起来,以提高它的优先级,例如:
y = (x = a + b, b + c);
这样,逗号运算符将首先计算(x=a+b),将x赋值为6,然后将(b+c)作为整个逗号运算符的计算结果,将其赋值给y,因此最终的输出将是y=10,x=6。

希望这可以帮助你理解逗号运算符的工作方式。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 19:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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