i和i有什麼區別,i和i有什麼區別啊

2021-03-03 22:16:21 字數 6152 閱讀 6312

1樓:匿名使用者

i++是先對i操作,再對i執行+1;

++i是先執行+1,將值賦給i後,再對i操作;

比如:int i=1;

int a=1+ i++; //執行過程是1+1,然後再將結果2賦給a,最後是i=i+1;

int a=1+ ++i; //執行過程是先執行i=i+1,得到2,然後執行1+i,並將結果1+i賦給a;

++i和i++有什麼區別啊?

2樓:匿名使用者

至於++i和i++有什麼區別,舉個例子

1.a = i++; 等校為

a = i;

i = i + 1;

2.a = ++i; 等校為

i = i + 1;

a = i;

i++和++i的 最重要的區別大家都知道就是 +1和返回值的順序

但,兩這還有一個區別(在c++中)就是i++在實現的時候,產

生了一個local object

class int;

//++i 的版本

int int::operator++()

//i++ 的版本

const int int::operator ++(int)

所以從效率上來說++i比i++來的更有效率

具體細節你可以看more effective c++ 的m6

看看c++類過載運算子就知道了。

對於i++的實現是:

int temp;

temp = i;

i = i+1;

return temp;

而++i的實現是:

i = i+1;

return i;

比如printf("%d",i++);是先輸出i值隨後i自加,而printf("%d",++i);正好相反

for(operation1;operation2;operation3)

都是按operation1

operation2

//do something

operation3

的順序來執行的

而i++與++i在單獨的語句中結果是一樣的。

簡單而言: ++i 在 i 儲存的值上增加一併向使用它的表示式 ``返回" 新的, 增加後的值; 而 i++ 對 i 增加一, 但返回原來的是未增加的值。

3樓:l溯流光

區別在於:++先做別的事,再自己加1,++i先自己加1,再做別的事情,形象的理解,你可以把++i比作自私的人,首先考慮自己的事,i++是無私的,先為別人照想,這樣方便記憶。

首先我們定義一個變數i,int i=5,然後我們做執行printf(「%d」,i++),我們會發現輸出結果是5。

是為什麼呢,我們要搞清楚printf(「%d」,i++)這句話是做兩件事:1.輸出i、2.i=i+1,這裡的順序,是先輸出i,再執行i=i+1。

然後我們初始化變數i,i=5;、然後我們做執行printf(「%d」,++i)、我們會發現輸出結果是6,其實printf(「%d」,++i);做的也是這兩件事:1.輸出i、2.

i=i+1,只是先做i=i+1,然後輸出i。

4樓:丁格格粟燁

1、首先兩者的區別是:前者是先賦值,然後再自增;後者是先自增,後賦值

2、++i和i++都是分兩步完成的。因為++i

是後面一步才賦值的,所以它能夠當作一個變數進行級聯賦值,++i=a

=b,即

++i是一個左值(可被定址的值);i++

的後面一步是自增,不是左值。(2的兩步分解與左右值的因果關係只是我的直覺,對錯還待考證)

3、++i

和i++

的使用,一般來說在迴圈域裡面,這兩者並沒有什麼很大的區別,因為編譯器一般都會給你做優化。但是要注意其生存週期,就好像指標delete以後一定要賦予0一樣,我們要注意i值在程式流中的變化。

擴充套件資料:

關於對迴圈i++的困惑:

for(int

i=0;i<10;i++)

過去我們都知道i++和++i的字面區別是在自增,i++是執行的時候為原來的數,執行完後自增。所以一直對這裡的i++以為也是同樣的操作。

進行步驟如下,i=0,滿足i<10,則進行i++操作。由於i++是當前執行的時候不自增,所以是i為0,然後執行輸入語句,輸出0.

接著返回自增條件i變成1.以此進行迴圈。所以最終除錯出來的結果是0,1,2,3,4,5,6,7,8,9.i=10的時候不滿足i<10這個條件,跳出迴圈體。

所以執行步驟是:

1、i=0

2、i<10

3、i++

4、輸出。

參考資料:搜狗百科——c語言

5樓:匿名使用者

i++ 是先呼叫i進行運算 然後下一輪的時候變成i+1再進行運算

++i是第一輪就用i+1算 下一輪就是i+2 依次類推

6樓:業慶母恬暢

一直以來,++

--語法浪費了太多人的時間。說句實在話,++--在c語言中其實是一個很細節的語法,除了表達簡練外,真的沒有什麼其它的好處了。

由於中國的c語言教程長期以來被譚浩強主宰,而譚又錯誤的把++--作為一個c語言重點來教,並增加了一些難點,把本來很簡單的語法,搞得複雜無比!

簡單的來說,++i

和i++,在單獨使用時,就是

i=i+1。而a

=++i,相當於

i=i+1;a=

i;而a=

i++,相當於a=

i;i=i+1;

如果實在搞不明白++

--怎麼回事,那也不是什麼天塌下來的事。

因為a=++i完全可以寫成

i++;

a=i。

a=i++完全可以寫成

a=i;

i++。

而且,這也是一種好的程式風格:++

--語句如非特殊需要,請單獨一行使用。

7樓:張廖琇雲力飛

i++和++i的區別就是:

i++:先引用,後增加

8樓:銀河緣木

計算是分 變數表 和 運算元棧 ,賦值操作都是將 運算元棧的值寫入到 變數表

int j = ++i 假如i=1

先將變數表i加1 ,變數表i=2

再複製到運算元棧 運算元棧i=2

再將運算元棧寫入到變數表 變數表j= 運算元棧i=2int j = i++ 假如i=1

先複製到運算元棧 運算元棧i=1

再將變數表i加1 ,變數表i=2

再將運算元棧寫入到變數表 變數表j= 運算元棧i=1

9樓:匿名使用者

i++是先求表示式的值再求i的值加1

++i是先讓i+1,再求表示式的值

10樓:本起雲運鵑

通俗一點

a=0,i=5

a=i++

(則a輸出為5,i輸出為6,因為先把i的值5附給a,然後i自加1,所以a=5,i=6)

a=++i

(則a輸出為6,i也輸出為6,因為程式先對i進行自加1得i=6,再把i的值附給a,所以a=6,i=6)

11樓:霜士恩餘巳

我是這樣來區別的,感覺比較好記也比較好理解,分享給大家:

count=0;

i=10;count

=++i

;//"++"在前面,就是i先加1,再把加1後的值(11)傳給count,

//該句執行結束,i

=11,

count

=11;

count

=i++;

//"++"在後面,就是先把當前i的值(10)傳給count,再加1.

//該句執行結束,i

=11,count

=10;

一句話就是,"+"號在前,先加1後賦值,"+"號在後,先賦值後加1.

12樓:郗和同戰教

你這題目特殊,所以結果不會改變

但是執行是不同的

i++那語句運**況是:1*1*2*3*4……++i那語句執行是:1*2*3*4……

(假設i=1)在一個語句裡:

i++的意思

i自加1

i=i+1(2)

但是在這個語句裡

i的值不變(仍是1)

到下個語句

i的值為(2)

而++i的話

一執行這語句

i的值就加1(為2);

貌似是這樣的,還請各位大蝦指正

13樓:匿名使用者

x++分為2句

運算x表示式;

x=x+1;

++x分2句

x=x+1;

在運算x的表示式;

14樓:匿名使用者

前者是先使i自加1,再用i的值

後者是先使用i的值 再使i自加1

15樓:匿名使用者

public class myclass

}輸出結果:

y=1z=2

16樓:浩劫

從c++ 的角度來看,兩者的效率以及左右值、作用差別都很大,以上答案都只說了作用或者左右值的區別。詳情請看我的部落格++i、i++、i+=1、i=i+1的區別不復制黏貼了

i++和++i的區別

17樓:匿名使用者

a = ++i,相當於 i=i+1; a = i;

a = i++,相當於 a = i; i=i+1;

如果有表示式 a = i++  它等價於 a = i ; i = i + 1;

如果有表示式 a = ++i  它等價於   i = i + 1; a = i;

1 首先兩者的區別是:前者是先賦值,然後再自增;後者是先自增,後賦值

2 ++i和i++都是分兩步完成的。因為++i 是後面一步才賦值的,所以它能夠當作一個變數進行級聯賦值,++i = a =b,即 ++i 是一個左值;i++ 的後面一步是自增,不是左值。

3  ++i 和i++ 的使用,一般來說在迴圈域裡面,這兩者並沒有什麼很大的區別,因為編譯器一般都會給你做優化。但是要注意其生存週期,以及很難察覺的寫髒,就好像指標delete以後一定要賦予0一樣,我們要注意i值在程式流中的變化。

18樓:我不知道

簡單地說,都是i自加1。區別是,i++是執行完後面的語句才加1;而++i就先做i+1才執行後面的語句。

19樓:淺源深科

++ i 是先 ++ 再輸出,i ++ 是先輸出再 ++ ,兩者的執行順序要搞清楚

20樓:匿名使用者

關於自增自減運算

,很多書籍沒有把問題講清楚,在c語言裡是這樣的:

1.後置運算:k++表示先運算,後自加。

意思是遇到k++了,我先把當前的k的值拿來參加運算,後面再去管它的自加。

那麼,【「後面」後到什麼程度呢?要後到當前的語句執行完,即遇到分號;表示

語句執行完了,所以k才自加1。】

如:int k=5,b=0;

b=k++;的意思就是,先算b=k(即b=5),遇到分號;表示語句結束,k才自加1,即k變為6。

2.前置運算:++k表示先自加,後運算

這個意思就是遇到++k了,先把k的值加了1,再往後執行別的。

如:int k=5,b=0;

b=++k;的意思就是,先把k自加1,即k為6,再算b=k(即b=6)。

掌握好這兩點,k--和--k也是一樣的道理。

21樓:匿名使用者

++i是在進行運算之前使i自增1,再用增後的值進行運算i++是在進行運算之後才使i增1,使用原值進行運算一次後,再使i自增1

你執行一下這個再體會體會就明白了:

i=1;j=1;k=1;t=1;

m1=i++ + i++;

m2=++j + ++j;

m3=k++ + ++k;

m4=++t + ++t;

(注:自增自減速運算只能對變數進行,常量和表示式不能進行該運算)

i和I 的區別,i 和 i命令有什麼區別?

在遊戲中就 i 我加你 i是求人家加。區別在於 應答 與請求 在程式設計中i 和 i最終是一樣的,不過在迴圈體中,i 是先取出i,再加1,i先加後取 i是先i自加1,然後在使用i的值 i 是先用i的值,在i自加1 比如 include main a為0,因為i先賦值給a,然後自加1 b為1,因為j先...

I3和I5有什麼區別啊

桌上型電腦i3 2100雙核四執行緒 i5 2300四核四執行緒 筆記本i3 2310m 雙核四執行緒 一個主頻5 2410m 雙核四執行緒 一個主頻,一個睿頻 功耗控制更好!acer aspire 4750g 2414g64mnkk,這個價效比較高,機子也不錯,我用的這個 i5比i3處理強 但i7...

酷睿I5與酷睿I7有什麼區別,酷睿i5和i7的區別

1 core i5 7xx core i7 8xx與core i7 9xx最大的區別是 core i7 9xx採用的是1366介面,而core i5 core i7 8xx採用1156介面,分別只能用在x58和p55 p57主機板上,兩種介面不能相容。2 1156的core i5 i7在記憶體控制器...