第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

請問一下x和y的結(jié)果是怎么運(yùn)算得來的?結(jié)果中第一個x結(jié)果怎么來的?

#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; ? ?

}

結(jié)果:

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

正在回答

1 回答

首先要知道printf的運(yùn)算是從右往左的..其次知道x++和++x的區(qū)別。

我們假設(shè)y=x++;那么這個的運(yùn)算順序其實(shí)就是{y=x;x=x+1;};

我們再假設(shè)y=++x;那么這個的運(yùn)算順序是{x=x+1;y=x;}

這就是這兩個的區(qū)別。然后考慮printf中的問題,它是自右往左的,所以一開始,x++的值用的其實(shí)只是x,然后用完之后x=x+1;所以x這里打印的是10,但是之后x的值是11,然后再來進(jìn)行++x操作,前加加是直接加后運(yùn)算的,那么x=12,然后打印出來的值也就是12了。下面的y類似~

另外由于c語言中沒有定義運(yùn)算規(guī)則,所以結(jié)果還跟編譯器版本有一定關(guān)系~

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

qq_Smile猜不透_0 提問者

那如果這樣輸出:printf("++x=%d;x++=%d;++x=%d\n",++x,x++,++x); 結(jié)果:++x=13;x++=11;++x=13 最后的++x的值是怎么得來的?
2015-01-16 回復(fù) 有任何疑惑可以回復(fù)我~
#2

Fiona0126 回復(fù) qq_Smile猜不透_0 提問者

= =。。首先這個跟編譯器有很大關(guān)系,因?yàn)檫@個是未定義的形為。我這里測試版本是gcc 4.7.3,你可以用反匯編看一下,先進(jìn)行的是++x操作,然后要知道x++的機(jī)制是開辟一個寄存器,先把值存到寄存器中去,以后用的值用那個寄存器里的,然后再進(jìn)行加操作。這個不需要深究的,寫這種代碼的人,公司也不會喜歡的= =。
2015-01-16 回復(fù) 有任何疑惑可以回復(fù)我~
#3

linkin55 回復(fù) qq_Smile猜不透_0 提問者

“++x,x++,++x”<-- printf打印操作是從右邊開始往左邊打印的, 同時(shí)前后兩個++x的取值是同一次操作。
2015-04-07 回復(fù) 有任何疑惑可以回復(fù)我~
#4

_Melody__0

還是不懂為什么++x不是11而是12 x++為什么還是它本身而不是11
2015-10-04 回復(fù) 有任何疑惑可以回復(fù)我~
查看1條回復(fù)

舉報(bào)

0/150
提交
取消

請問一下x和y的結(jié)果是怎么運(yùn)算得來的?結(jié)果中第一個x結(jié)果怎么來的?

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號