不明白自加自減的過(guò)程?
注意:無(wú)論是a++還是++a都等同于a=a+1,在表達(dá)式執(zhí)行完畢后a的值都自增了1,無(wú)論是a--還是--a都等同于a=a-1,在表達(dá)式執(zhí)行完畢后a的值都自減少1。
對(duì)于這個(gè)自加自減的問(wèn)題搞不明白,有人能說(shuō)得簡(jiǎn)單,明白,詳細(xì)點(diǎn)嘛?最好用100的那個(gè)例題做詳細(xì)說(shuō)明,無(wú)盡感謝,謝謝!
注意:無(wú)論是a++還是++a都等同于a=a+1,在表達(dá)式執(zhí)行完畢后a的值都自增了1,無(wú)論是a--還是--a都等同于a=a-1,在表達(dá)式執(zhí)行完畢后a的值都自減少1。
對(duì)于這個(gè)自加自減的問(wèn)題搞不明白,有人能說(shuō)得簡(jiǎn)單,明白,詳細(xì)點(diǎn)嘛?最好用100的那個(gè)例題做詳細(xì)說(shuō)明,無(wú)盡感謝,謝謝!
2015-06-25
舉報(bào)
2015-06-25
通常說(shuō),a++是先取值后運(yùn)算,++a是先運(yùn)算后取值。實(shí)際上這里涉及好幾個(gè)基本概念!?先確定你清楚“運(yùn)算符”、“表達(dá)式”和“語(yǔ)句”的概念:
++ 是一個(gè)“自增運(yùn)算符”,自增運(yùn)算符有兩種形式:前綴自增(++a)和后綴自增(a++)。
運(yùn)算符和操作數(shù)合起來(lái)就是一個(gè)表達(dá)式(a++、++a都是表達(dá)式,a就是操作數(shù))。注意:每一個(gè)表達(dá)式本身都有值(和其類(lèi)型),有的表達(dá)式還有“副作用”。比如自增表達(dá)式的副作用就是使其操作數(shù)自增1。那么自增運(yùn)算表達(dá)式的值是什么呢? a++ 的值就是 a 的值,而 ++a 的值等于 a+1。?
表達(dá)式后面加上一個(gè)分號(hào)才是一個(gè)完整的“語(yǔ)句”。
還有一個(gè)關(guān)鍵內(nèi)容:前面說(shuō)使操作數(shù)自增1是自增表達(dá)式的副作用,那么這個(gè)副作用什么時(shí)候發(fā)生呢? 準(zhǔn)確地說(shuō)是在“序列點(diǎn)”后保證會(huì)發(fā)生。 序列點(diǎn)這個(gè)概念比較復(fù)雜,對(duì)于例題中這個(gè)簡(jiǎn)單的情況,你只需要知道:在本語(yǔ)句結(jié)束后,這些副作用肯定發(fā)生了。
下面講解下3-3的例題:
int a = 100; 最開(kāi)始時(shí)a是100。
打印 a++; ?這個(gè)printf會(huì)打印a++的值,注意是a++表達(dá)式的值,看我前面的講解,a++的值就是a的值,也就是100。 別忘了這語(yǔ)句結(jié)束后a的值就會(huì)自增1(也就是副作用發(fā)生了)。
打印 ++a; ?目前a的值為101。現(xiàn)在要打印++a表達(dá)式的值,++a的值就等于a+1,所以會(huì)打印出102。 此語(yǔ)句后a=101+1=102。
打印 --a; ?這次要打印--a表達(dá)式的值,同自增一個(gè)道理,--a的值等于a-1,所以會(huì)打印出101。 此語(yǔ)句后a=102-1=101。
打印 a--; ?a--表達(dá)式的值就是a的值,所以打印出101。 此語(yǔ)句后a=101-1=100。
打印 a+1; ?這表達(dá)式與自增無(wú)關(guān),只是打印a+1的值,就是101。 對(duì)a本身的值沒(méi)有影響(加法表達(dá)式?jīng)]有副作用)。
打印 a; ?這時(shí)a的值當(dāng)然還是100了。
2017-07-09
感謝,太感謝了,思考了好久終于明白了。
2017-03-30
樓主棒棒,簡(jiǎn)單明了
2015-12-13
關(guān)鍵就在副作用上面 ?初學(xué)者 教材里沒(méi)提到
2015-12-06
感謝樓主~!!
2015-11-07
非常感謝
2015-11-01
贊一個(gè)~終于看懂了
2015-10-30
原來(lái)執(zhí)行printf 語(yǔ)句要根據(jù)前一個(gè)printf的執(zhí)行結(jié)果再執(zhí)行下一個(gè)printf的?? 謝謝Lz的詳細(xì)解答?? 棒棒的
2015-10-27
謝謝,懂了
2015-10-15
通俗易懂