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运行的..
逗号运算符的级别比赋值运算符要低,因此先要赋值,即y=a,所以y的值是2,如果想要达到你的目的,应该再加个括号y=(a,(a+b))或者写成y=(a,a+b) 我记得两年前学C++的时候,记得是从右边计算到左边的吧,先算a+b=4给Y,在A给Y.我忘得差不多了,自己去网上百度一下吧。 y=a,(a+b)
这个逗号表达式相当于(y=a),((a+b))
整个表达式的值是a+b的值,求出这个值后立即将它抛弃(因为没有存储)
所以,你后面无法看到这个被抛弃的值是多少,而y的值是由于第一个表达式y=a获得的,跟整个逗号运算符的值无关。 运算符优先级问题,赋值运算符比逗号运算符高,改为 y = (a, (a+b)); 就能得到你想要的结果了 y=a,(a+b) == (y=a),(a+b)
然后你觉得y是 = a 呢 还是a+b呢 #include<stdio.h>
int main()
{
int b;
int y,a=b=2;
y=(a,(a+b));
printf("%d\n",y);
return 0;
} 这个和编译器无关吧,和表达式的逻辑有关:
1.不用括号,表示的是两个表达式, y=a 和 (a+b) 显然不是版主的想法吗
2.用了括号,问题就显而易见了嘛!!!
say high!!! 顺带一句:我用的是 DevC++ 最好在逗号表达式最外面加上()免得出现你现在这个错误 路过顶一下
页:
[1]