★~★暀倳冋忆 发表于 2012-10-3 21:32:11

这程序小纠结

#include <stdio.h>   
void main()
{
int a=2,b=4,c=6,x,y;
y=(x=a+b),(b+c),(5+c);
printf("y=%d,x=%d\n",y,x);
}
想问一下最后y输出的是(5+c),还是a+b;


向往 发表于 2012-10-3 21:51:26

输出a+b
如果是y=((x=a+b),(b+c),(5+c));
就输出5+c

Mr.C 发表于 2012-10-4 01:13:27

直接试试不就行了。

贝壳 发表于 2012-10-4 01:25:39

同意2楼和3楼。楼主,这是考试题吗?

〃绕指年华ぐ 发表于 2012-10-4 02:15:58

试试不就得了    y=6,x=6```

□为 发表于 2012-10-4 09:33:18

目测楼主应该是把逗号表达式没有理解透。{:1_1:}
y=(x=a+b),(b+c),(5+c);在这个表达式中由于存在逗号表达式!而逗号表达式是只把最后一项的值作为整个表达式的值,所以此时Y=5+c, 而printf("y=%d,x=%d\n",y,x);这个表达式中是将Y的值和X的值输出来,这里的逗号只是作为一个分隔符的,不算是逗号表达式,所以此时X=a+b
最终屏幕输出结果为: x = 6
                                 y = 11
望楼主采纳。 By丶Joker_Qzi

the_one 发表于 2012-10-4 17:44:35

□为 发表于 2012-10-4 09:33 static/image/common/back.gif
目测楼主应该是把逗号表达式没有理解透。
y=(x=a+b),(b+c),(5+c);在这个表达式中由于存在逗号表达式 ...

纠正一下吧,其实亲自调试一下应该就能发现y=6,x=6
确实,按照逗号表达式的规定,最后一项为整个表达式的值,但是还要考虑运算符的优先级
赋值运算符=为十四级,而逗号运算符,为十五级,在同一语句中要先算=
也就是说原语句相当于(y=(x=a+b)),(b+c),(5+c);,也就是说x和y都等于a+b,虽然整个表达式值为5+c但没有变量来接受这个值
这也是为什么y=((x=a+b),(b+c),(5+c));中y就等于5+c的原因,先算括号里的,逗号表达式就比赋值表达式优先了

□为 发表于 2012-10-4 23:15:28

the_one 发表于 2012-10-4 17:44 static/image/common/back.gif
纠正一下吧,其实亲自调试一下应该就能发现y=6,x=6
确实,按照逗号表达式的规定,最后一项为整个表达式的 ...

呃…对啊!!卧槽   刚发现呵呵 谢啦~~~~

考鸡蛋 发表于 2012-10-5 21:01:51

y=(x=a+b),(b+c),(5+c);什么意思?

焚琴煮鹤 发表于 2015-2-24 23:13:44

       int main()
       {
         int a = 2, b = 4, c = 6, x, y;
         y = (x = a + b), (b + c);
         printf("y = %d, x = %d\n",y,x);
         a = 2, b = 4, c = 6, x, y;
         y = ((x = a + b), (b + c));
         printf("y = %d, x = %d\n",y,x);
         return 0;
      }
试试这个吧:ton:
页: [1]
查看完整版本: 这程序小纠结