[英]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
。
讓我們轉到循環中的幾次迭代。
當a
為9
,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
,然后遞增a
由1
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.