簡體   English   中英

循環中的前增量和后增量有什么區別(for/while)?

[英]What is the difference between pre-increment and post-increment in the cycle (for/while)?

我的興趣在於forwhile循環之間的區別。 我知道使用后增量值然后遞增,並且操作返回一個常量前增量。

while (true) {
    //...
    i++;
    int j = i;
}

在這里, j將在循環結束時包含舊的i還是后遞增的i

由於語句 i++ 結束於; 在您的示例中,無論您使用前增量還是后增量都沒有區別。

當您使用結果時會出現差異:

int j = i++; // i will contain i_old + 1, j will contain the i_old.

對比:

int j = ++i; // i and j will both contain i_old + 1.

取決於你如何使用它們。

  • i++創建一個副本,增加 i,並返回副本(舊值)。
  • ++i增加 i,並返回 i。

在您的示例中,這完全與速度有關。 ++i將比i++更快,因為它不會復制。

但是,編譯器可能會將其優化掉,因為您沒有在示例中存儲增量運算符的返回值,但這僅適用於int等基本類型。

理解的基本答案。 遞增運算符的工作方式如下:

// ++i
function pre_increment(i) {
    i += 1;
    return i;
}
// i++
function post_increment(i) {
    copy = i;
    i += 1;
    return copy;
}

當一個好的編譯器檢測到返回的值不會被使用時,它會自動將i++替換為++i

在預增量中,初始值首先遞增,然后在表達式中使用。

a = ++i;

在這個例子中,假設變量i的值為 5。那么變量a的值為 6,因為i的值在在表達式中使用之前已被修改。

在后增量中,值首先在表達式中使用,然后遞增。

a = i++;

在此示例中,假設變量i的值為 5。那么變量a值將是 5,因為i的值僅在將值 5 分配給a后才會增加。

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char **argp)
{
    int x = 5;

    printf("x=%d\n", ++x);
    printf("x=%d\n", x++);
    printf("x=%d\n", x);

    return EXIT_SUCCESS;
}

程序輸出:

x=6
x=6
x=7

在第一個 printf 語句中,x 在傳遞給 printf 之前遞增,因此輸出值 6,在第二個 x 傳遞給 printf(所以輸出 6)然后遞增,第三個 printf 語句僅顯示前一個后遞增通過再次輸出 x 現在的值 7 來聲明。

i++ 使用 i 的值然后遞增它,但 ++i 在使用它之前遞增 i 的值。

在許多情況下,后增量和前增量之間的差異確實很微妙。 post incremenet,又名num++ ,首先創建num的副本,返回它,然后遞增它。 另一方面,預增量又名++num ,首先計算,然后返回值。 大多數現代編譯器,當在循環中看到這一點時,通常會優化,主要是在使用后增量時,並且不使用返回的初始值。 兩個增量之間的最大區別(通常會產生細微的錯誤)是在聲明具有增量值的變量時:示例如下:

int num = 5;
int num2 = ++num; //Here, first num is incremented, 
                  //then made 6, and that value is stored in num2;

另一個例子:

int num = 5;
int num2 = num++; //Here, num is first returned, (unfortunately?), and then 
                  //incremented. This is useful for some cases.

我想說的最后一件事是小心增量 聲明變量時,請確保使用正確的增量,或者只寫出整個內容( num2 = num + 1 ,這並不總是有效,相​​當於預增量)。 如果您使用正確的增量,將會省去很多麻煩。

在獨立語句中使用前置增量還是后置增量都沒有關系,除了前置增量,效果是即時的

//an example will make it more clear:


int n=1;
printf("%d",n);
printf("%d",++n);// try changing it to n++(you'll get to know what's going on)

n++;
printf("%d",n);

輸出:123

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM