于峰 发表于 2014-7-13 22:12:45

C语言逗号运算符问题

本帖最后由 风之残月 于 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运行的..

xgr2002 发表于 2014-7-13 22:12:46

逗号运算符的级别比赋值运算符要低,因此先要赋值,即y=a,所以y的值是2,如果想要达到你的目的,应该再加个括号y=(a,(a+b))或者写成y=(a,a+b)

zhoushilei 发表于 2014-7-13 22:31:03

我记得两年前学C++的时候,记得是从右边计算到左边的吧,先算a+b=4给Y,在A给Y.我忘得差不多了,自己去网上百度一下吧。

仰望天上的光 发表于 2014-7-13 23:07:24

y=a,(a+b)
这个逗号表达式相当于(y=a),((a+b))
整个表达式的值是a+b的值,求出这个值后立即将它抛弃(因为没有存储)
所以,你后面无法看到这个被抛弃的值是多少,而y的值是由于第一个表达式y=a获得的,跟整个逗号运算符的值无关。

沉默默 发表于 2014-7-13 23:52:42

运算符优先级问题,赋值运算符比逗号运算符高,改为 y = (a, (a+b)); 就能得到你想要的结果了

牡丹花下死做鬼 发表于 2014-7-14 13:02:07

y=a,(a+b) == (y=a),(a+b)
然后你觉得y是 = a 呢 还是a+b呢

许许 发表于 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;
}

许许 发表于 2014-7-14 14:10:12

这个和编译器无关吧,和表达式的逻辑有关:
1.不用括号,表示的是两个表达式, y=a 和 (a+b) 显然不是版主的想法吗
2.用了括号,问题就显而易见了嘛!!!

say high!!!

许许 发表于 2014-7-14 14:11:23

顺带一句:我用的是 DevC++

sliwu 发表于 2014-7-15 11:51:53

最好在逗号表达式最外面加上()免得出现你现在这个错误

ydst365 发表于 2014-7-15 13:39:41

路过顶一下
页: [1]
查看完整版本: C语言逗号运算符问题