for迴圈i與i的區別是前加加是先執行迴圈體內的

2021-10-17 05:09:37 字數 5797 閱讀 9240

1樓:問明

區別:一、從**執行的效果來看,它們並無任何區別,但是它們所生成的**是有有所不同的。

1、i++:先引用後增加;

意思是:先在i所在的表示式中使用i的當前值,後讓i加1。

2、++i:先增加後引用;

意思是:讓i先加1,然後在i所在的表示式中使用i的新值。

二、i++由於是在使用當前值之後再+1,所以會需要一個臨時變數來轉儲,而++則直接+1,不存在這樣的問題。

舉例**:

int c=0;

for(int i=0;i<=50;i++)

c=c+i;

std::cout<1、首先在debug下編譯:

i++情況

; 9    :  int c;

; 10   :  for(int i=0;i<=50;i++)

mov dword ptr _i$20035[ebp], 0

jmp short $ln3@wmain

$ln2@wmain:

mov eax, dword ptr _i$20035[ebp]

add eax, 1

mov dword ptr _i$20035[ebp], eax

$ln3@wmain:

cmp dword ptr _i$20035[ebp], 50  ; 00000032h

jg short $ln1@wmain

; 11   :   c=c+i;

cmp byte ptr $t25811[ebp], 0

jne short $ln6@wmain

push offset $ln7@wmain

call __rtc_uninituse

add esp, 4

2、++i情況

; 9    :  int c;

; 10   :  for(int i=0;i<=50;++i)

mov dword ptr _i$20035[ebp], 0

jmp short $ln3@wmain

$ln2@wmain:

mov eax, dword ptr _i$20035[ebp]

add eax, 1

mov dword ptr _i$20035[ebp], eax

$ln3@wmain:

cmp dword ptr _i$20035[ebp], 50  ; 00000032h

jg short $ln1@wmain

; 11   :   c=c+i;

mp byte ptr $t25811[ebp], 0

jne short $ln6@wmain

push offset $ln7@wmain

call __rtc_uninituse

add esp, 4

$ln6@wmain:

mov eax, dword ptr _c$[ebp]

add eax, dword ptr _i$20035[ebp]

mov byte ptr $t25811[ebp], 1

mov dword ptr _c$[ebp], eax

jmp short $ln2@wmain

$ln1@wmain:

三、++i確實省去了對記憶體操作的環節,直接add eax, 1,用++i真的能提高效能。

當然,上面是用debug版本,也就是說沒有優化,那麼在release優化的情況下。

舉例:1、i++優化

; 9    :  int c;

; 10   :  for(int i=0;i<=50;i++)

mov ecx, dword ptr _c$[esp+4]

xor eax, eax

$ll3@wmain:

; 11   :   c=c+i;

add ecx, eax

inc eax

cmp eax, 50     ; 00000032h

jle short $ll3@wmain

2、++i優化

; 9    :  int c;

; 10   :  for(int i=0;i<=50;++i)

mov ecx, dword ptr _c$[esp+4]

xor eax, eax

$ll3@wmain:

; 11   :   c=c+i;

add ecx, eax

inc eax

cmp eax, 50     ; 00000032h

jle short $ll3@wmain

結論:在沒有編譯器優化的情況下,++i更好。優化過後兩者都一樣,看起來似乎喜歡怎樣寫都無所謂了。

但是如果這裡的i不是int而是迭代器,那麼++在前和在後就會有所不同,使用++i將會有切實的更高的效率。雖然int情況下沒多少區別,但為了語法上的統一,最好一律改用++i這種形式。

2樓:匿名使用者

在for迴圈中,如for(i=0;i<5;i++)與for(i=0;i<5;++i)在for迴圈的次數上沒有區別,都是五次,因為i++和++i都是在for迴圈內的語句執行後才執行!

3樓:匿名使用者

兩個對於迴圈的次數都是沒影響的,都是5次,都是當 i 小於5 不成立的時候跳出迴圈,但後面的 i 還是會遞增1的。

兩者不同的地方在於++i 佔用的空間比 i++ 要小,i++是多定義一個變數的。看看運算子過載可以知道是怎麼回事。

4樓:匿名使用者

單獨的++i和i++ 一樣,結果沒有區別,都是i加1

你的迴圈也是如此,都是迴圈5次

5樓:匿名使用者

對於for來說沒有區別;但對於賦值 j=++i和j=i++ 就不同了, 一個先+1再賦值,一個是先賦值再加一

在c語言的for迴圈中,i++和++i有區別嗎,i++是不是意味著先用i的指去做判斷再自身+1?

6樓:育知同創教育

在c語言的for迴圈中,i++和++i沒有區別,最後得到的結果都是一樣的,本質i都會加1

7樓:漆暮昀

++i是先自增後再執行語句,i++是先執行語句再自增。

8樓:今晚不要想我

i++ 是for 迴圈執行一遍後+1 ,++i 是已進入for 迴圈 就+1,

for(int i=0 ;i<1 ;i++)輸出的結果是 0 1

9樓:戶哲茂

沒區別 for(i=0;i<8;i++)

10樓:風鳴神羽

for迴圈是先執行迴圈體再自加的,所以沒區別

for迴圈的累加條件i++ 和 ++i有什麼區別

11樓:茜拉密

i++是先進行一次迴圈,在進行累加;++i是i先進行一次累加,再迴圈。

兩個對於迴圈的次數都是沒影響的,都是5次,都是當 i 小於5 不成立的時候跳出迴圈,但後面的 i 還是會遞增1的。

兩者不同的地方在於++i 佔用的空間比 i++ 要小,i++是多定義一個變數的。看看運算子過載可以知道是怎麼回事。

在for迴圈中,如for(i=0;i<5;i++)與for(i=0;i<5;++i)在for迴圈的次數上沒有區別,都是五次,因為i++和++i都是在for迴圈內的語句執行後才執行!

12樓:匿名使用者

迴圈變數++i 和 i++對for迴圈而言是等效的。例如int i;

for( i=0; i<100; i++)for( i=0; i<100; ++i)這兩個迴圈的迴圈體都被執行了100次;迴圈結束時,i 的值都等於100。

13樓:匿名使用者

一般來說,二者之間沒有區別,這是對ansi c來說的,因為ansi c沒有規定二者的實現方法。也有人說有區別,這是針對某個c語言的具體實現而言的,這些人認為++i,比i++效率更高。

14樓:think說

int i=1,a;

a = i++;

a = ++i;

前面的a = 1而後面的a =2

因為i++是先賦值後計算,而++i則是先計算後賦值,這樣說相信你會明白的,而在for迴圈裡面的條件語句就沒有區別了!

15樓:油煎餅把燦

你問的問題的答案肯定是沒有區別,

你看看下面四個例子就懂了

for (a = 1; a < 3 ; a++);

printf("%d\n",a);

輸出的結果是3

for (a = 1; a < 3 ; ++a);

printf("%d\n",a);

輸出的結果是3

for (a = 1; a < 3 ; a++)printf("%d\n",a);

輸出的結果是2

for (a = 1; a < 3 ; ++a)printf("%d\n",a);

輸出的結果是2

16樓:

for(int i=0;i<10;i++)for(int i=0;i<10;++i)這樣沒有區別。

int i=1;

int a = i++;

int a = ++i;

這時才有區別

第一個a是1

第二個a是2

17樓:windy岸

兩者都是在迴圈迭代結束後執行

18樓:匿名使用者

中ci++先引用後增值,++i先增值後引用

for迴圈中的i++何++i沒區別嗎?

19樓:

for迴圈中的i++和++i是有區別的,區別如下:

i++是先引用i的值再自加,而++i是先讓i自加再引用i的值。本迴圈中i++的輸出值為0 1 2 3 4 5 6 7 8 9,而++i的輸出值為1 2 3 4 5 6 7 8 9,但兩種演算法執行完畢之後,i的值都為10.一般實際應用中,先加在引用顯得更高效。

for迴圈中的變數可以是一個也可以是多個,不要侷限於一個變數處理到底,那樣有時會很單調,當程式適合把多個變數組成迴圈時,用多個for語句來表示就是有些浪費了!

20樓:zzllrr小樂

i++是先取i值進行本程式語句的計算,然後再自加1

++i是先自加1,再進行本語句運算。

如果只進行自加,而不涉及其他運算的情況下,兩者效果是一樣的。

21樓:嵐洌

++i是先讓i自加再引用i的值,而i++是先引用i的值再自加。而迴圈中的這個沒有參與i值的引用,所以是沒區別的。但是如果參與到i值的使用,就不同了,例如:

#include

using namespace std;

int main()

這個輸出結果就是0 1

22樓:落恬靜

for迴圈中沒有區別,如下測試程式結果均為012345

23樓:

i++是先取i值進行本語句的計算再自加1,++i是先自加1再進行本語句運算。

如果是i++;這種只進行自加而沒有其他運算的情況下,效果當然是一樣的咯。

24樓:匿名使用者

沒有區別噢

都是i的增值

有時候for內的第三個表示式還可以省略的

25樓:匿名使用者

在相同情況下,for語句中的 ++i 比 i++ 更加高效。

C語言迴圈語句中i 和 i有什麼區別

假設i 6 那麼i 的值為6,但執行完i 後i的值就變成7了 i的值為7,因為 i是這樣執行的 先自增後取值 簡單的來說,i 和i 在單獨使用時,就是 i i 1。而a i,相當於 i i 1 a i 而a i 相當於a i i i 1 如果實在搞不明白 怎麼回事,那也不是什麼天塌下來的事。因為a ...

華碩a53 i3和i5的區別,華碩i5的「5200」和i5「7200」有什麼區別?

華碩a53 系列就a53xi243sv sl 最好。是i5 2430m 顯示卡晶片 nvidia geforce gt 540m 記憶體雖然只有2g 但也比i3 記憶體4g的好 可以支援dx11。但有些大型3d遊戲可能不是很流暢。但i5的比i3的玩起來好點。dx11 是針對顯示卡的 與cpu沒多大關...

C語言程式設計中的 i和i 有什麼區別

i 和i 的區別 1 運算方式 i 屬於自增運算,相當於i i 1 i 屬於自減運算,相當於i i 1 2 值的變化 假設i 10,分別執行i i 後 i 後 i i 1 10 1 11 i 後 i i 1 9。擴充套件資料 無論i 還是i 這兩個公式既可以單獨存在,也可以賦值給另外的變數。當賦值引...