對i 與 i的分析

2021-07-07 04:18:53 字數 1785 閱讀 7385

標籤: 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,再計算表示式的值 前自減,先減再用 當自增自減遇上邏輯與和邏輯或 因邏輯與一非即...