鱼C论坛

 找回密码
 立即注册
查看: 2905|回复: 8

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

[复制链接]
发表于 2015-10-7 00:45:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
今天听小甲鱼的视频课程,讲到逗号运算符和逗号表达式这节,提到求值过程是分别求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.
求高手指点。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

不知道有没有说错:lol:,我也是新手,学到函数:ton:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-7 12:00:49 | 显示全部楼层
那么这句话“并以表达式2的值作为整个逗号表达式的值”怎么解释呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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=25  b只是一个申明 和前面的a=25没关系
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-10-7 17:37:04 | 显示全部楼层
同意楼上的,逗号应该只是起到分隔作用吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-10-8 17:16:09 | 显示全部楼层
试试同时赋两个值,用逗号隔开,再看看结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-8 18:40:31 | 显示全部楼层
感谢各位指点{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-10-13 22:11:29 | 显示全部楼层
wlz330860661 发表于 2015-10-7 02:05
hello,由于“,”运算符的优先级别低于“=”运算符 ,所以在括号运算以后优先吧25赋值给y。

不知道有没 ...

这说的咋那么别扭呢?逗号运算符有两个属性1.它保证被它分开的表达式按从左到右的顺序计算,(逗号是个顺序点,逗号左边产生的所有副作用都在程序运行到逗号右边之前生效)2.整个逗号表达式的值是右边成员的值.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-8 14:46:43 | 显示全部楼层
y=(x=a+b),(b+c);
多加一括号
y=((x=a+b),(b+c));
这就能出现你想要的答案了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 13:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表