孤独宅 发表于 2018-10-20 18:45:06

关于逗号运算符连接表达式的问题

#include <stdio.h>

void main()
{
        int a=2,b=4,c=6,x,y;
        y=(x=a+b),(b+c);
        printf("y=%d,x=%d\n",y,x);
}


小弟刚刚开始接触C语言,有很多不懂的东西,还请各位大佬多多指教。
我在视频中看到逗号运算符连接表达式,是最后一个表达式(b+c)给y赋值,那y=10,
但我运行之后是y=6   这是为什么?

ba21 发表于 2018-10-20 19:18:10


1先(x=a+b)把a+b的值赋值给x 这时x=6
2也就是说(x=a+b) 就是 x
3y=(x=a+b) 意思就是 y=x 把x的值赋值给y ,y =6
4 ,号后 执行(b+c) ; (b+c)并没有赋值给谁,这是无用操作。

TyCk 发表于 2018-10-20 19:18:14

如果需要等于10的话,应该这样写y=((x=a+b),(b+c));
在这里,要用括号将逗号隔开的两个表达式括起来,才能达到你想要的效果。
至于原因,这样看,a、b、c值代入后:
y=(x=2+4),(4+6);
也就是:y=(x=6),10;
换句话说,这样写,其实是这样的两个表达式y=x=6和10,所以y和x的值其实都是6.
一个道理,你也可以输出(y=(x=a+b),(b+c))这个表达式的值,括起来之后结果也是10.

claws0n 发表于 2018-10-20 19:18:34

表达式的值是最后一个,但是赋值的情况只有前面,所以是 6

孤独宅 发表于 2018-10-21 10:47:04

多谢各位大佬解惑
页: [1]
查看完整版本: 关于逗号运算符连接表达式的问题