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字尾的意思是無法拆卸的...