鱼C论坛

 找回密码
 立即注册
查看: 6438|回复: 17

用逗号运算符出现的一个奇怪现象,求解释、

[复制链接]
发表于 2013-8-11 16:46:57 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>

int main(void)
{
        int a = 2, b = 4, c = 6, x, y;
        y = (x = a + b),(b + c);
        printf("y = %d, x = %d\n", y,x);
        return 0;
}

运行结果y的值也为6,不是应该是10的么?此处和解?
QQ图片20130811164826.jpg

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-11 17:06:56 | 显示全部楼层
也就是说你的编译器是自右向左编译的  
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-11 17:11:30 | 显示全部楼层
其实楼主真的不用纠结这个的 显示编程中 谁会这么写啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-11 17:17:18 | 显示全部楼层
根本不是逗号表达式,“ y = (x = a + b),(b + c);”和 “ int a = 2, b = 4, c = 6, x, y;”没有区别!都是同一类!:shock:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-11 17:18:14 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-11 17:19:06 | 显示全部楼层
牡丹花下死做鬼 发表于 2013-8-11 17:11
其实楼主真的不用纠结这个的 显示编程中 谁会这么写啊

嗯,也就是几行试验代码罢了.....我就是想搞明白是怎么回事嘛
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-11 17:21:57 | 显示全部楼层
henryrao 发表于 2013-8-11 17:17
根本不是逗号表达式,“ y = (x = a + b),(b + c);”和 “ int a = 2, b = 4, c = 6, x, y;”没有区别!都是 ...

这不是逗号表达式?   是不是应该再把(x = a + b),(b + c)用一个括号括起来才算是逗号表达式啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-11 17:22:50 | 显示全部楼层
henryrao 发表于 2013-8-11 17:17
根本不是逗号表达式,“ y = (x = a + b),(b + c);”和 “ int a = 2, b = 4, c = 6, x, y;”没有区别!都是 ...

这不是逗号表达式?   是不是应该再把(x = a + b),(b + c)用一个括号括起来才算是逗号表达式啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-11 17:32:40 | 显示全部楼层
还有运算符优先级的问题,逗号运算符的优先级很低!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-11 17:32:49 | 显示全部楼层
岚澈清 发表于 2013-8-11 17:18
什么意思啊? 我还是不太明白你说的。

就是说  如果是自左向右 y = (b+c)
                    自右向左 y = (x=a+b)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-11 17:44:15 | 显示全部楼层
henryrao 发表于 2013-8-11 17:32
还有运算符优先级的问题,逗号运算符的优先级很低!

嗯,我知道了,逗号运算法的优先级是最低的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-11 17:48:19 | 显示全部楼层
henryrao 发表于 2013-8-11 17:32
还有运算符优先级的问题,逗号运算符的优先级很低!

加一个括号就和预期结果一样了,是优先级的问题。谢谢你
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-11 18:21:25 | 显示全部楼层
要再加个括号才是逗号表达式
y = ((x = a + b),(b + c));

y = (x = a + b),(b + c); 中后面的(b+c)没有执行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-11 21:55:58 | 显示全部楼层
福禄娃娃 发表于 2013-8-11 18:21
要再加个括号才是逗号表达式
y = ((x = a + b),(b + c));

是的是的.....谢谢你,是我粗心大意了,逗号的优先级最低了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-11 22:31:39 | 显示全部楼层
岚澈清 发表于 2013-8-11 21:55
是的是的.....谢谢你,是我粗心大意了,逗号的优先级最低了。

没事,不用客气。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-12 05:16:20 | 显示全部楼层
y = (x = a + b),(b + c);
这行代码和下面的代码根本就没区别嘛
y = x = a + b;  //y = x = 6;
b + c;  //这句没什么意义啊
你只不过是把两句代码写成一行了而已。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-12 06:08:45 | 显示全部楼层
好好的学习了 呵呵。。。。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-12 11:18:48 | 显示全部楼层
18555587 发表于 2013-8-12 05:16
y = (x = a + b),(b + c);
这行代码和下面的代码根本就没区别嘛
y = x = a + b;  //y = x = 6;

对的,对的...呵呵
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-16 10:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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