C語言基礎
unsigned int i;
for (i = 3; i >= 0; i--)
printf("%u ", i);unsigned int 為32位元。執行上方程式碼時的動作,下列何者正確?
- A顯示 3 2 1 0 後結束
- B顯示 3 2 1 後結束
- C顯示 3 2 1 0 後仍不結束,從4294967295開始一邊遞減一邊持續顯示
查看答案與解析
正確答案:C. 顯示 3 2 1 0 後仍不結束,從4294967295開始一邊遞減一邊持續顯示
i 是無號的,因此不會變成負值,條件 i >= 0 永遠為真。i 為0時執行 i--,會回到 2³² − 1 = 4294967295,迴圈不會結束,持續顯示4294967294、4294967293。若要倒數到0,可以使用 int,或改寫成 for (i = 4; i-- > 0; ) 這樣的寫法。gcc 加上 -Wextra 時,會發出這個比較永遠為真的警告。
- A. i 為0時 i >= 0 也為真,因此迴圈不會在0結束。
- B. i 為0時條件也為真,因此也會顯示0,並在之後繼續執行。
- C. 正確。無號的 i 從0減1會變成4294967295,條件永遠為真。