大苏打dd 发表于 2023-2-20 20:15:30

求助逗号运算符

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
是我的逗号运算符用的不对吗

ExiaGN001 发表于 2023-2-20 20:47:34

(y=(x=a+b)),((b+c));
实际上这样

两手空空儿 发表于 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; 这一句的时候,先执行 “=”, 后执行 “,”

ouyunfu 发表于 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。

希望这可以帮助你理解逗号运算符的工作方式。
页: [1]
查看完整版本: 求助逗号运算符