標題: 3-3 自增與自減運算符 這節(jié)課我來來回回想了很多次,也看了很多問答題,但都不太好,請各位解答下我心中的疑惑
這是他的說明:
無論是a++還是++a都等同于a=a+1,在表達式執(zhí)行完畢后a的值都自增了1,
?無論是a--還是--a都等同于a=a-1,在表達式執(zhí)行完畢后a的值都自減少1。
我理解的意思有兩種意思: ?定義一個變量 int a=1;
1: ? ??a++ ?或 ?++a ?,運算后a的最終結(jié)果是一樣的,a都等于2 ? ??
? ? ? ? 而a-- ?或 ? --a,,運算后a的最終結(jié)果是一樣的,a都等于0
2: ?也就是說 ?a++ ?或 ?++a ,a-- ?或 ? --a, 都有多余的一個。
?關(guān)鍵是事實不是這樣的,我想不通,按照它的說明我這樣理解哪里不對?
我想不通,所以這節(jié)課我來來回回想了很多次,也看了很多問答題,但都不太好
2015-09-08
你所描述的理解是對的。在語句結(jié)束后a確實都自增/自減了。
當然不是多余的啦。關(guān)鍵區(qū)別就在于這個前置自增和后置自增表達式本身的值上。
關(guān)于上面的第2點,解答如下:
通常說,a++是先取值后運算,++a是先運算后取值。實際上這里涉及“運算符”、“表達式”的概念。
++ 是一個“自增運算符”,自增運算符有兩種形式:前置自增(++a)和后置自增(a++)。
運算符和操作數(shù)合起來就是一個表達式(a++、++a都是表達式,a就是操作數(shù))。注意:每一個表達式本身都有值(和其類型),有的表達式還有“副作用”。比如自增表達式的副作用就是使其操作數(shù)自增1。那么自增運算表達式的值是什么呢??a++ 的值就是 a 的值,而 ++a 的值等于 a+1。?
所以,如果有這樣的代碼 i = a++;? 你可以認為:i?獲得的是a++這個表達式的值(也就是a當時的值),a++表達式的副作用再將a自增。 同理 i = ++a; 這里?i?獲得的是++a表達式的值(就是a自增后的值)。
還有一個關(guān)鍵的內(nèi)容,雖然你的問題中沒有體現(xiàn)出來。那就是:前面說使操作數(shù)自增1是自增表達式的副作用,那么這個副作用什么時候發(fā)生呢? 準確地說是在“序列點”后保證會發(fā)生。 序列點這個概念比較復雜,代碼中的很多地方算是序列點,簡單地說:你先記住“語句結(jié)束時”是一個序列點。這序列點之前的運算符的副作用,在執(zhí)行到這點以后都保證會發(fā)生。注意并不是在這一點之后就突然發(fā)生的,這些副作用可能在序列點前的任何一個位置發(fā)生,C標準只是規(guī)定在序列點之后這些副作用必須已經(jīng)發(fā)生了。?這一點非常關(guān)鍵,本站的課程中并沒有講解,甚至本站的題目在這一點上還出現(xiàn)了大量的錯誤!(我強烈懷疑講師都不明白這點...)
2015-09-08
onemoo : ? 請幫我看一看,我從你給的答案中有所領(lǐng)悟,下圖是我的理解你幫忙看下是否是正確的,還有解疑和糾正