課程
/后端開發(fā)
/C
/C語言入門
我不太明白下面的結(jié)果是怎么算出來的(自增自減運(yùn)算)
2016-11-20
源自:C語言入門 3-3
正在回答
在前面的回答中找到的正確的回答
通常說,a++是先取值后運(yùn)算,++a是先運(yùn)算后取值。實(shí)際上這里涉及好幾個(gè)基本概念!?先確定你清楚“運(yùn)算符”、“表達(dá)式”和“語句”的概念:
++ 是一個(gè)“自增運(yùn)算符”,自增運(yùn)算符有兩種形式:前綴自增(++a)和后綴自增(a++)。
運(yùn)算符和操作數(shù)合起來就是一個(gè)表達(dá)式(a++、++a都是表達(dá)式,a就是操作數(shù))。注意:每一個(gè)表達(dá)式本身都有值(和其類型),有的表達(dá)式還有“副作用”。比如自增表達(dá)式的副作用就是使其操作數(shù)自增1。那么自增運(yùn)算表達(dá)式的值是什么呢? a++ 的值就是 a 的值,而 ++a 的值等于 a+1。?
表達(dá)式后面加上一個(gè)分號才是一個(gè)完整的“語句”。
還有一個(gè)關(guān)鍵內(nèi)容:前面說使操作數(shù)自增1是自增表達(dá)式的副作用,那么這個(gè)副作用什么時(shí)候發(fā)生呢? 準(zhǔn)確地說是在“序列點(diǎn)”后保證會(huì)發(fā)生。 序列點(diǎn)這個(gè)概念比較復(fù)雜,對于例題中這個(gè)簡單的情況,你只需要知道:在本語句結(jié)束后,這些副作用肯定發(fā)生了。
下面講解下3-3的例題:
int a = 100; 最開始時(shí)a是100。
打印 a++; ?這個(gè)printf會(huì)打印a++的值,注意是a++表達(dá)式的值,看我前面的講解,a++的值就是a的值,也就是100。 別忘了這語句結(jié)束后a的值就會(huì)自增1(也就是副作用發(fā)生了)。
打印 ++a; ?目前a的值為101?,F(xiàn)在要打印++a表達(dá)式的值,++a的值就等于a+1,所以會(huì)打印出102。 此語句后a=101+1=102。
打印 --a; ?這次要打印--a表達(dá)式的值,同自增一個(gè)道理,--a的值等于a-1,所以會(huì)打印出101。 此語句后a=102-1=101。
打印 a--; ?a--表達(dá)式的值就是a的值,所以打印出101。 此語句后a=101-1=100。
打印 a+1; ?這表達(dá)式與自增無關(guān),只是打印a+1的值,就是101。 對a本身的值沒有影響(加法表達(dá)式?jīng)]有副作用)。
打印 a; ?這時(shí)a的值當(dāng)然還是100了。
安小瞳 提問者
爲(wèi)了自己的時(shí)間奮鬥
剛開始a=100,第一個(gè)printf時(shí)先輸出a=100然后給a自增,此時(shí)a=101,第二個(gè)printf時(shí)先給a自增,此時(shí)a=102然后輸出a=102,
第三個(gè)printf時(shí)先給a自減,此時(shí)a=101然后輸出a=101,
第四個(gè)printf時(shí)先輸出a=101,然后a自減,此時(shí)a=100,
第五個(gè)printf時(shí)直接輸出a+1=101,但是沒有改變a的值,所以此時(shí)a還是為100,
第六個(gè)printf時(shí)直接輸出a=100;
qq_xiaopiaor_04013783
King丶賓 回復(fù) qq_xiaopiaor_04013783
舉報(bào)
C語言入門視頻教程,帶你進(jìn)入編程世界的必修課-C語言
3 回答自增自減是怎么運(yùn)算的?
3 回答自增自減的運(yùn)算結(jié)果 有點(diǎn)不懂
3 回答自增自減是怎么算的?
4 回答自增自減運(yùn)算
3 回答自增和自減的運(yùn)算
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2016-11-20
在前面的回答中找到的正確的回答
通常說,a++是先取值后運(yùn)算,++a是先運(yùn)算后取值。實(shí)際上這里涉及好幾個(gè)基本概念!?先確定你清楚“運(yùn)算符”、“表達(dá)式”和“語句”的概念:
++ 是一個(gè)“自增運(yùn)算符”,自增運(yùn)算符有兩種形式:前綴自增(++a)和后綴自增(a++)。
運(yùn)算符和操作數(shù)合起來就是一個(gè)表達(dá)式(a++、++a都是表達(dá)式,a就是操作數(shù))。注意:每一個(gè)表達(dá)式本身都有值(和其類型),有的表達(dá)式還有“副作用”。比如自增表達(dá)式的副作用就是使其操作數(shù)自增1。那么自增運(yùn)算表達(dá)式的值是什么呢? a++ 的值就是 a 的值,而 ++a 的值等于 a+1。?
表達(dá)式后面加上一個(gè)分號才是一個(gè)完整的“語句”。
還有一個(gè)關(guān)鍵內(nèi)容:前面說使操作數(shù)自增1是自增表達(dá)式的副作用,那么這個(gè)副作用什么時(shí)候發(fā)生呢? 準(zhǔn)確地說是在“序列點(diǎn)”后保證會(huì)發(fā)生。 序列點(diǎn)這個(gè)概念比較復(fù)雜,對于例題中這個(gè)簡單的情況,你只需要知道:在本語句結(jié)束后,這些副作用肯定發(fā)生了。
下面講解下3-3的例題:
int a = 100; 最開始時(shí)a是100。
打印 a++; ?這個(gè)printf會(huì)打印a++的值,注意是a++表達(dá)式的值,看我前面的講解,a++的值就是a的值,也就是100。 別忘了這語句結(jié)束后a的值就會(huì)自增1(也就是副作用發(fā)生了)。
打印 ++a; ?目前a的值為101?,F(xiàn)在要打印++a表達(dá)式的值,++a的值就等于a+1,所以會(huì)打印出102。 此語句后a=101+1=102。
打印 --a; ?這次要打印--a表達(dá)式的值,同自增一個(gè)道理,--a的值等于a-1,所以會(huì)打印出101。 此語句后a=102-1=101。
打印 a--; ?a--表達(dá)式的值就是a的值,所以打印出101。 此語句后a=101-1=100。
打印 a+1; ?這表達(dá)式與自增無關(guān),只是打印a+1的值,就是101。 對a本身的值沒有影響(加法表達(dá)式?jīng)]有副作用)。
打印 a; ?這時(shí)a的值當(dāng)然還是100了。
2016-11-20
剛開始a=100,第一個(gè)printf時(shí)先輸出a=100然后給a自增,此時(shí)a=101,
第二個(gè)printf時(shí)先給a自增,此時(shí)a=102然后輸出a=102,
第三個(gè)printf時(shí)先給a自減,此時(shí)a=101然后輸出a=101,
第四個(gè)printf時(shí)先輸出a=101,然后a自減,此時(shí)a=100,
第五個(gè)printf時(shí)直接輸出a+1=101,但是沒有改變a的值,所以此時(shí)a還是為100,
第六個(gè)printf時(shí)直接輸出a=100;