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在記憶體控制器...