鱼C论坛

 找回密码
 立即注册
查看: 1496|回复: 11

[已解决]逗号运算符

[复制链接]
发表于 2020-10-30 22:11:29 | 显示全部楼层 |阅读模式

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

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

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",y,x);
} >
最佳答案
2020-10-30 23:15:15
1163028233 发表于 2020-10-30 22:56
是这样的,书上是用这题举例;y=表达式1,表达式2;然后输出表达式2,可是我打印这个式子,没有出现逗号 ...

怎么没有出现作用呢?由于赋值运算符的优先级大于逗号运算符,逗号后面的运算就被略去了呀。你如果将逗号改为+号,那么由于加号的优先级高于赋值,这个表达式的值也就不一样了

关系运算符 < 、>、<=、>= 、不等于运算符 != 、逻辑与运算符 &&、逻辑或运算符 ||、条件运算符 ?:  这些都比赋值运算高,他们任何一个都会改变表达式的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-30 22:13:28 | 显示全部楼层
逗号运算符,按道理应该是y=b+c=10啊,怎么打出来是y=6,还有我用了<>这个,怎么不是添加代码文字?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-30 22:25:07 | 显示全部楼层
1163028233 发表于 2020-10-30 22:13
逗号运算符,按道理应该是y=b+c=10啊,怎么打出来是y=6,还有我用了这个,怎么不是添加代码文字?

赋值运算符的优先级大于逗号运算符,所以先赋值了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-30 22:30:08 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-10-30 22:25
赋值运算符的优先级大于逗号运算符,所以先赋值了

那如果我想让y=10,又使用上逗号运算符,是如何改进代码?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-30 22:50:38 | 显示全部楼层
1163028233 发表于 2020-10-30 22:30
那如果我想让y=10,又使用上逗号运算符,是如何改进代码?


你添加的尖括号,直接使程序报错

要让y = 10, 换一下就是了:y=(x=b+c),(a+b);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-30 22:56:43 | 显示全部楼层
风过无痕1989 发表于 2020-10-30 22:50
你添加的尖括号,直接使程序报错

要让y = 10, 换一下就是了:y=(x=b+c),(a+b);

是这样的,书上是用这题举例;y=表达式1,表达式2;然后输出表达式2,可是我打印这个式子,没有出现逗号运算符的作用,所以我想知道怎么使逗号运算符正常使用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-30 23:15:15 | 显示全部楼层    本楼为最佳答案   
1163028233 发表于 2020-10-30 22:56
是这样的,书上是用这题举例;y=表达式1,表达式2;然后输出表达式2,可是我打印这个式子,没有出现逗号 ...

怎么没有出现作用呢?由于赋值运算符的优先级大于逗号运算符,逗号后面的运算就被略去了呀。你如果将逗号改为+号,那么由于加号的优先级高于赋值,这个表达式的值也就不一样了

关系运算符 < 、>、<=、>= 、不等于运算符 != 、逻辑与运算符 &&、逻辑或运算符 ||、条件运算符 ?:  这些都比赋值运算高,他们任何一个都会改变表达式的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-30 23:24:51 | 显示全部楼层
风过无痕1989 发表于 2020-10-30 23:15
怎么没有出现作用呢?由于赋值运算符的优先级大于逗号运算符,逗号后面的运算就被略去了呀。你如果将逗号 ...

书上说,本例中,y等于整个逗号表达式的值,也就是表达式2的值,x是第一个表达式的值。
我现在明白这题由于赋值运算符的优先级大于逗号运算符,逗号后面的运算就被略去了,那书上这个例子就是错误的,那如果我想表达书上要表达的“y等于整个逗号表达式的值,也就是表达式2的值,x是第一个表达式的值“;这个怎么表达?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-31 00:22:05 | 显示全部楼层
1163028233 发表于 2020-10-30 23:24
书上说,本例中,y等于整个逗号表达式的值,也就是表达式2的值,x是第一个表达式的值。
我现在明白这题 ...

没有错呀。是整个表达式的值呀

      y = (x = 2+ 4),(4 + 6)
         = (x = 6),(10)
         = x,10
         = x  // 由于后面是逗号运算,而逗号的优先级低于赋值运算
所以 y = x
         = 6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-31 16:50:05 | 显示全部楼层
风过无痕1989 发表于 2020-10-31 00:22
没有错呀。是整个表达式的值呀

      y = (x = 2+ 4),(4 + 6)

你好,可能是我表达的不好,你说的这个意思我听懂了,我的意思是如果我想让y赋值为表达式二,如何绕过赋值运算(因为逗号的优先级低于赋值运算),而我看书上说“表达式一,表达式二;用逗号运算是得到表达式二。'那我何必要写表达式一,直接写表达式二不就好了?我想知道表达式一,表达式二的逗号运算应用的场景是什么样的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-31 18:20:42 | 显示全部楼层
哦天哪,莫名感觉一群。。。

y = ((x = 2 + 4),10)
这样就改变了优先级

求最佳
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-31 22:31:27 | 显示全部楼层
1163028233 发表于 2020-10-31 16:50
你好,可能是我表达的不好,你说的这个意思我听懂了,我的意思是如果我想让y赋值为表达式二,如何绕过赋 ...

你的问题还真有点为难我了。既然你选我的答案为最佳答案,我就不能让你白选,于是,我搜遍了网络上的文章。这里有一遍,不知你看了后能不能理解。不能理解,咱们再聊

https://www.cnblogs.com/lijiangjiang/p/4621305.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 20:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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