3 回答

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

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