为了账号安全,请及时绑定邮箱和手机立即绑定

请问一下x和y的结果是怎么运算得来的?结果中第一个x结果怎么来的?

#include <stdio.h>

int main()

{

    int x = 10;

    int y= 10;

    printf("++x=%d;x++=%d\n",++x,x++);

    printf("--y=%d;y--=%d\n",--y,y--); 

    return 0;    

}

结果:

++x=12;x++=10
--y=8;y--=10

正在回答

1 回答

首先要知道printf的运算是从右往左的..其次知道x++和++x的区别。

我们假设y=x++;那么这个的运算顺序其实就是{y=x;x=x+1;};

我们再假设y=++x;那么这个的运算顺序是{x=x+1;y=x;}

这就是这两个的区别。然后考虑printf中的问题,它是自右往左的,所以一开始,x++的值用的其实只是x,然后用完之后x=x+1;所以x这里打印的是10,但是之后x的值是11,然后再来进行++x操作,前加加是直接加后运算的,那么x=12,然后打印出来的值也就是12了。下面的y类似~

另外由于c语言中没有定义运算规则,所以结果还跟编译器版本有一定关系~

0 回复 有任何疑惑可以回复我~
#1

qq_Smile猜不透_0 提问者

那如果这样输出:printf("++x=%d;x++=%d;++x=%d\n",++x,x++,++x); 结果:++x=13;x++=11;++x=13 最后的++x的值是怎么得来的?
2015-01-16 回复 有任何疑惑可以回复我~
#2

Fiona0126 回复 qq_Smile猜不透_0 提问者

= =。。首先这个跟编译器有很大关系,因为这个是未定义的形为。我这里测试版本是gcc 4.7.3,你可以用反汇编看一下,先进行的是++x操作,然后要知道x++的机制是开辟一个寄存器,先把值存到寄存器中去,以后用的值用那个寄存器里的,然后再进行加操作。这个不需要深究的,写这种代码的人,公司也不会喜欢的= =。
2015-01-16 回复 有任何疑惑可以回复我~
#3

linkin55 回复 qq_Smile猜不透_0 提问者

“++x,x++,++x”<-- printf打印操作是从右边开始往左边打印的, 同时前后两个++x的取值是同一次操作。
2015-04-07 回复 有任何疑惑可以回复我~
#4

_Melody__0

还是不懂为什么++x不是11而是12 x++为什么还是它本身而不是11
2015-10-04 回复 有任何疑惑可以回复我~
查看1条回复

举报

0/150
提交
取消

请问一下x和y的结果是怎么运算得来的?结果中第一个x结果怎么来的?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信