標籤: c語言 ++i i++
by 小威威
(1)單獨使用
i++與++i單獨作為乙個語句使用時,即
i++
;++i;
二者是等價的,並沒有什麼爭議,相當於語句
i+=1;
(2)賦值使用
首先,i++與++i有什麼本質區別呢?
*i++指先取出i,再進行i+=1操作;
++i指先進行i+=1,再取出i。*
i++與++i賦值使用時,即
a=i
++;a
=++i;
此時二者表示的含義是不同的。
對於a = ++i,並沒有什麼爭議,即是
i += 1;
a = i;
然而對於a = i++,該語句目前有兩種解釋:
i.假設temp是乙個暫時儲存資料的變數。該語句表示:
temp = i;
i + = 1;
a = temp;
這個的原理是++的等級高於=,取出i值放到等號右邊時,應先執行++操作,再執行賦值操作,照這麼解釋所以這個語句並沒有發揮任何作用。
ii.第二種解釋呢,即
a = i;
i++;
這個的原理是取出i以後就直接賦給a,再進行i+=1的操作。因為這個不符合運算子優先順序的原則,所以我是不大贊同的。
int i = 0;
i = i++;
對於第一種解釋,i最終的值為0;
對於第二種解釋,i最終的值為1。
那麼到底誰對誰錯呢?我們用事實說話。
# include
int main(void)
輸出結果:
a = 0
i = 1
b = 1
j = 1
i = 0
j = 1
第乙個printf輸出第一二行,其前面的內容是用於檢驗a = i++與a = ++i這種情況。
第二個printf輸出第三行,其前面的內容用於檢驗i = i++;這一情況。
首先我要說明一下,我對i++與++i情況的分析僅侷限於c語言,其他語言的編譯器我並不了解,所以有可能輸出結果不同。
我用了三個編譯器,
windows下 dec c++;mac ox下 xcode;linux 下 gcc編譯器,發現輸出結果相同。
於是,在這種情況下,只能說明第一種解釋更為合理。
對於i++與++i這一問題已經爭議了很久,其實並沒有多大的意義。我相信大多數人也沒有搞清楚這個問題,包括我們學校的老師。我聽過兩個程設的老師的課,乙個支援解釋一,乙個支援解釋二,連老師都沒搞清楚這問題,顯然這部分內容是無關緊要的。
對此,我們何不放開點,繞開這種表達,將該語句拆成兩個語句:
假如你要先將i賦給a,再執行i++,何不
a = i;
i++;
假如你要先將i+=1,再執行賦值操作,何不
i++;
a = i;
這樣既沒有了爭議,又不徒增煩惱,何樂而不為呢?希望這篇文章能解決你的困惑~
最後給個終極版的解釋:
對於賦值運算,++i表示返回i+=1的值,i++表示返回i的值。
i 與 i的區別
public class test static int x,y public static void main string args public static void mymethod 選項 compiletime error prints 1 prints 2 prints 3 print...
i 與 i的區別
今天在寫題的時侯在 i與i 上遇到了麻煩,具體就是我在寫乙個迴圈語句時因為沒有弄清楚i 與 i的區別而導致的錯誤。之前對於i 與 i的使用都只侷限於如下方式 for j 2 j 9 j for j 2 j 9 j 這樣使用好像兩者並沒有什麼區別。然而當我像下面這樣用時卻出了問題 for j i,t ...
自增 i與i 自減 i與i
a 前置自增 變數值先 1,再計算表示式的值 前自增,先增再用 a 後置自增 先計算表示式的值 變數值後 1 後自增,先用再增 a 後置自減 先計算表示式的值 變數值後 1 後自減,先用再減 a 前置自減 變數值先 1,再計算表示式的值 前自減,先減再用 當自增自減遇上邏輯與和邏輯或 因邏輯與一非即...