小鲜鱼 发表于 2015-10-7 00:45:52

初学C语言,今天碰到一个逗号运算符和逗号表达式的问题

今天听小甲鱼的视频课程,讲到逗号运算符和逗号表达式这节,提到求值过程是分别求2个表达式的值,并以表达式2的值作为整个逗号表达式的值,我有点不解,程序如下:
#include<stdio.h>
void main()
{       
        int a=2,b=23,c=35,x,y;
        y=(x=a+b),(b+c);
        printf("y=%d,x=%d",y,x);

}
我运行结果是y=25,x=25。我想问一下,如果是将表达式2的作为整个逗号表达式的值的话,那么y不是要等于(b+c),即=58.
求高手指点。。。。

wlz330860661 发表于 2015-10-7 02:05:04

hello,由于“,”运算符的优先级别低于“=”运算符 ,所以在括号运算以后优先吧25赋值给y。

不知道有没有说错:lol:,我也是新手,学到函数:ton:

小鲜鱼 发表于 2015-10-7 12:00:49

那么这句话“并以表达式2的值作为整个逗号表达式的值”怎么解释呢?

只是一个酱油 发表于 2015-10-7 15:47:20

y=(x=a+b),(b+c); 你可以这样看
y=(x=a+b),   (b+c);
y=x =a+b
y=x=2+23
y=x=25
而后面的(b+c)是用逗号隔开的   就像
int a=25,b;
只是a=25b只是一个申明 和前面的a=25没关系

甲鱼牙1 发表于 2015-10-7 17:37:04

同意楼上的,逗号应该只是起到分隔作用吧

简单爱你 发表于 2015-10-8 17:16:09

试试同时赋两个值,用逗号隔开,再看看结果

小鲜鱼 发表于 2015-10-8 18:40:31

感谢各位指点{:1_1:}

桃花飞舞 发表于 2015-10-13 22:11:29

wlz330860661 发表于 2015-10-7 02:05
hello,由于“,”运算符的优先级别低于“=”运算符 ,所以在括号运算以后优先吧25赋值给y。

不知道有没 ...

这说的咋那么别扭呢?逗号运算符有两个属性1.它保证被它分开的表达式按从左到右的顺序计算,(逗号是个顺序点,逗号左边产生的所有副作用都在程序运行到逗号右边之前生效)2.整个逗号表达式的值是右边成员的值.

悠悠飘落 发表于 2020-4-8 14:46:43

y=(x=a+b),(b+c);
多加一括号
y=((x=a+b),(b+c));
这就能出现你想要的答案了{:5_109:}
页: [1]
查看完整版本: 初学C语言,今天碰到一个逗号运算符和逗号表达式的问题