怀念部队 发表于 2014-6-19 23:38:29

菜鸟求助,关于逗号运算符

#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);
}

这是小甲鱼老师的课件里面的一个练习题,我觉得应该是y=10,x=6;
但是vc6.0测试的结果是y=6,x=6;
求解。

折心灬小轩 发表于 2014-6-20 01:18:15

x为6,因为a+b=2+4=6,不再解释
y的结果为6,是因为,y=(x=a+b),(b+c);不等于y=((x=a+b),(b+c));,如果是后者,y的值为10,解释如下:
y=(x=a+b),(b+c);中b+c的值与a+b的值都被求出,a+b的值被赋给了变量x,而x的值又被赋给了y,把本句拆分开,相当于x=a+b;y=x,b+c;这样看就清晰很多了,y=x,b+c中y的值于x的值相同,均为6,但是表达式的值为10(这就是你误认为的结果),如果本句中的表达式为y=(x,b+c),那么由于都好表达式的缘故,y的值和表达式的值相同,均为10
总结:本例y=(x=a+b),(b+c);中,b+c的值是表达式的值,与y的值无关

满意请采纳,不满意请追问

vvqboy 发表于 2014-6-20 09:39:28

折心灬小轩 发表于 2014-6-20 01:18 static/image/common/back.gif
x为6,因为a+b=2+4=6,不再解释
y的结果为6,是因为,y=(x=a+b),(b+c);不等于y=((x=a+b),(b+c));,如果是 ...

对哦,等号后面没用括号括起来

santaclaus 发表于 2014-6-20 12:35:06

2楼解释清楚了。。。

xuheng 发表于 2014-6-21 22:37:33

2楼解释得很好。。。

huha88 发表于 2014-6-30 15:05:34

是小甲鱼老师的课件

秋风扫落叶LQ 发表于 2014-7-1 13:23:23

这个我也不太懂

彳山一几攵 发表于 2014-7-4 15:45:45

这个我也不太懂

hfut_wangfei 发表于 2014-7-4 17:42:50

2楼解释得很好。。。
“y=(x=a+b),(b+c);”不同于“y=((x=a+b),(b+c));”。前者则y值为6,后者则y值为10
页: [1]
查看完整版本: 菜鸟求助,关于逗号运算符