3 回答

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊
“m--不是應(yīng)該是先輸出m的當(dāng)前值再改變m的值嗎”
不要這么記,因?yàn)檫@句話中的“輸出”是什么意思??? 這可能會使你錯(cuò)誤地理解自增減表達(dá)式的作用。
m++ 表達(dá)式的值就是 m 自增前的值,當(dāng)然這個(gè)表達(dá)式還會使 m 自增 1。
同理,m-- 表達(dá)式的值是 m 自減前的值,當(dāng)然這也會使 m 自減 1。
那么這個(gè)代碼中:
一開始,if 中的判斷條件是 m++ 表達(dá)式和 5 的大小作比較,m++ 表達(dá)式的值就是 5,所以 5 > 5 的結(jié)果是 false,故代碼將進(jìn)入 else 分支。
代碼執(zhí)行到 else 分支,重要的一點(diǎn)是:這時(shí) m 已經(jīng)完成了自增,這時(shí) m 的值是 6。
這里要 print 的是 m-- 表達(dá)式的值,同理,m-- 表達(dá)式的值還是 6,所以會打印出 6。當(dāng)然 m 還會被自減 1,所以最終 m 的值會是 5。
注意:我在上面的描述中用了“m++ 表達(dá)式的值”和“m 的值”這兩中說法。沒錯(cuò),它們是不同的東西! 這個(gè)代碼中使用到的分別是 m++ 和 m-- 表達(dá)式的值,并沒有直接用 m 的值,所以不要被 m 本身值的增減變化誤導(dǎo)了。
其實(shí)我給你之前問題的回答中提到了這些內(nèi)容,如果你還是不太清楚的話,請看?http://idcbgp.cn/wenda/detail/350085?中提到的那個(gè)詳細(xì)解答。

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊
對了,我說的格式化是指這樣的效果:
int?main(void) { ????int?m=5; ????if(m++>5) ????????printf("%d",?m); ????else ????????printf("%d",?m--); }
這樣比你直接寫代碼要好看多了吧?
而且自帶行號,方便別人給你指出哪行有問題。
- 3 回答
- 0 關(guān)注
- 1622 瀏覽
添加回答
舉報(bào)