簡體   English   中英

while循環后的值,后增量

[英]Value after the while loop with post-increment

請解釋一下為什么最后一個printf給出值11? 我真的不明白為什么會這樣。 當a = 10時,條件不滿足,為什么這個值變為11? 檢查條件后立即增加?

碼:

int main(void) {
    int a = 0;
    while(a++ < 10){
        printf("%d ", a);
    }
    printf("\n%d ", a);
    return 0;
}

輸出:

1 2 3 4 5 6 7 8 9 10 
11 

a等於a++ < 10時,讓我們看一下a++ < 10 10

將要發生的第一件事是10 < 10將被評估(為假),然后a將增加到11 然后執行while循環外的printf語句。

++出現在變量的右側時,它就是在線上評估的最后一件事。

嘗試將a++ < 10更改為++a < 10 ,重新運行代碼並比較結果。

后增量運算符在執行語句之后遞增變量的值。

我們舉一個例子,

int k = 5 ;
printf("%d\n", k++ );
printf("%d", k );

將輸出

5
6

因為在第一個printf() ,輸出顯示,只有在此之后,該值才會遞增。

所以,讓我們看看你的代碼

while(a++ < 10)

它檢查a < 10然后在之后,它增加a

讓我們轉到循環中的幾次迭代。

a9 ,while循環檢查9 < 10然后將a增加到10,因此您將獲得該迭代的輸出為10,同樣,對於下一次迭代,它將檢查10 < 10但是while循環不執行,但價值a遞增為11 ,因此,在你的下一個printf() ,你會得到作為輸出11

讓我們看一段更簡單的代碼來展示a++功能。

int a = 0;
int b = a++;

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

我認為你希望這輸出1 1 實際上,它會輸出1 0

這是因為a++作用。 它增加的值a ,但表達的值a++是的初始遞增前的值a

如果我們想把我的答案頂部的初始代碼寫成多個語句,它實際上會被翻譯成:

int a = 0;
int b = a;
a = a + 1;

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

我們可以訪問的另一個增量是預增量。 不同之處在於,表達式++a的值是增加后的a的值。

因為它是后增量。 編譯器將首先評估a<10 ,然后遞增a1

暫無
暫無

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

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