關於使用while迴圈時,括號內用自加自減作條件的一個疑問
阿新 • • 發佈:2019-02-19
《C Primer Plus》第五版第五章的一道思考題:
/*測試程式 2015.12.26*/
#include <stdio.h>
#define TEN 10
int main(void)
{
int n = 0;
while(n++ < TEN)
printf("%5d", n);
printf("\n");
return 0;
}
開始我認為輸出結果為 0 1 2 3 4 5 6 7 8 9 10,但是在VC++6.0中驗證之後發現結果為 1 2 3 4 5 6 7 8 9 10。
在《C Primer Plus》第五版第五章(P104)有一段說明:
順序點幫助闡明後綴增量動作何時發生。例如,考慮下面的程式碼:
while (guests++ < 10)
printf ("%d \n", guests);
有時C的初學者會設想在本程式中“先使用該值,然後增加它的值”的意思是在使用了printf()語句後再增加guests的值。然而,因為guests++<10是while迴圈的判斷條件,所以它是一個完整的表示式,這個表示式的結束就是一個順序點。因此,C保證副作用(增加guests的值)在程式進入printf()前發生。同時使用字尾形式保證了guests在與10比較後才增加。