鱼C论坛

 找回密码
 立即注册
查看: 2338|回复: 10

C语言逗号运算符问题

[复制链接]
发表于 2014-7-13 22:12:45 | 显示全部楼层 |阅读模式
1鱼币
本帖最后由 风之残月 于 2014-11-10 10:18 编辑

鱼C教程上说逗号运算符是将最后一个表达式的值返回..
#include<stdio.h>
void main()
{
        int b;
        int y,a=b=2;
    y=a,(a+b);
        printf("%d\n",y);
}


不过我这段代码返回的值是2,而不是(a+b)的值2..
求解答这是怎么回事...
VC++6.0运行的..

最佳答案

查看完整内容

逗号运算符的级别比赋值运算符要低,因此先要赋值,即y=a,所以y的值是2,如果想要达到你的目的,应该再加个括号y=(a,(a+b))或者写成y=(a,a+b)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-13 22:12:46 | 显示全部楼层
逗号运算符的级别比赋值运算符要低,因此先要赋值,即y=a,所以y的值是2,如果想要达到你的目的,应该再加个括号y=(a,(a+b))或者写成y=(a,a+b)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-13 22:31:03 | 显示全部楼层
我记得两年前学C++的时候,记得是从右边计算到左边的吧,先算a+b=4给Y,在A给Y.我忘得差不多了,自己去网上百度一下吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-13 23:07:24 | 显示全部楼层
y=a,(a+b)
这个逗号表达式相当于(y=a),((a+b))
整个表达式的值是a+b的值,求出这个值后立即将它抛弃(因为没有存储)
所以,你后面无法看到这个被抛弃的值是多少,而y的值是由于第一个表达式y=a获得的,跟整个逗号运算符的值无关。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-13 23:52:42 | 显示全部楼层
运算符优先级问题,赋值运算符比逗号运算符高,改为 y = (a, (a+b)); 就能得到你想要的结果了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-14 13:02:07 | 显示全部楼层
y=a,(a+b) == (y=a),(a+b)
然后你觉得y是 = a 呢 还是a+b呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-14 14:07:05 | 显示全部楼层
#include<stdio.h>
int main()
{
        int b;
        int y,a=b=2;
            y=(a,(a+b));
        printf("%d\n",y);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-14 14:10:12 | 显示全部楼层
这个和编译器无关吧,和表达式的逻辑有关:
1.不用括号,表示的是两个表达式, y=a 和 (a+b) 显然不是版主的想法吗
2.用了括号,问题就显而易见了嘛!!!

say high!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-14 14:11:23 | 显示全部楼层
顺带一句:我用的是 DevC++
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-15 11:51:53 | 显示全部楼层
最好在逗号表达式最外面加上()免得出现你现在这个错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-15 13:39:41 | 显示全部楼层
路过顶一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-29 00:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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