关于逗号运算符的问题
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了。这个是跟优先级有关吗?一条语句里同时包含小括号里面的表达式,和逗号后面的表达式,整个表达式的值以小括号的值作为最终结果吗? 这肯定跟优先级有关系的
优先级是括号>赋值符号>逗号
所以第一种会先算(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赋值了 中国人的习惯就是从左到右,括号里的运算也一样, 中国人的习惯就是从左到右,括号里的运算也一样,
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 有多个 都以最右边为值
,左边的表达式也会执行
(x = 4 * 5, x * 5, x + 25)中
x * 5
执行完是个值 然后丢弃了 x本身并没有改变
以最右边为整个表达式的值 就是20+25 45
页:
[1]