hehevv 发表于 2021-6-8 21:22:24

关于逗号运算符的问题

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了。这个是跟优先级有关吗?一条语句里同时包含小括号里面的表达式,和逗号后面的表达式,整个表达式的值以小括号的值作为最终结果吗?

lei1996 发表于 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赋值了

2736946915 发表于 2021-6-8 23:27:42

中国人的习惯就是从左到右,括号里的运算也一样,

2736946915 发表于 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

万千只cnm 发表于 2021-6-8 23:53:40

有多个 都以最右边为值
,左边的表达式也会执行
(x = 4 * 5, x * 5, x + 25)中
x * 5   
执行完是个值 然后丢弃了 x本身并没有改变
以最右边为整个表达式的值   就是20+25 45
页: [1]
查看完整版本: 关于逗号运算符的问题