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

時間 2021-10-17 05:10:03

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++ 更加高效。

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

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.一般實際應用中,先加在引用顯得更高效。f...

c語言迴圈語句i 與 i的問題

海南特產大全 我知道你有什麼困惑了,我之前學習c語言看譚浩強那本書上就寫的很清楚,但最後,用到for迴圈裡面我就納悶了,該用i 還是 i呢?其實這兩個都等價於i i 1,只要在for迴圈裡面,不管是哪一個,在之前加1還是之後加1,運算的結果都是以i i 1來計算,所以 以下程式就很好理解了!程式執行...

i7 4710mq與i5 4210hq的區別

最主要的區別是 i7 4710mq是四核心八執行緒 i5 4210h是雙核心四執行緒 所以前者要比後者效能強很多 只有i5 4210h 沒有hq 你應該是打錯了 另外的區別就是i7預設主頻2.5 i5是2.9 要高一點點 但是彌補不了雙核與四核 四執行緒與八執行緒間的大差距 h字尾的意思是無法拆卸的...