亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

請問一下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下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號