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