鱼C论坛

 找回密码
 立即注册
查看: 2358|回复: 4

[已解决]关于逗号运算符连接表达式的问题

[复制链接]
发表于 2018-10-20 18:45:06 | 显示全部楼层 |阅读模式

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

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

x
#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   这是为什么?
最佳答案
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.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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)并没有赋值给谁,这是无用操作。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-10-20 19:18:34 | 显示全部楼层
表达式的值是最后一个,但是赋值的情况只有前面,所以是 6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2018-10-21 10:47:04 | 显示全部楼层
多谢各位大佬解惑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 19:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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