C語言基礎
int a = 0, b = 0;
if (a++ && b++) { }
if (a++ || b++) { }
printf("%d %d\n", a, b);執行上方在 && 與 || 的右邊寫了 b++ 的程式碼時的輸出,下列何者正確?
- A2 0
- B2 1
- C2 2
查看答案與解析
正確答案:A. 2 0
&& 在左邊為偽時、|| 在左邊為真時,不會求值右邊(短路求值)。第1個 if 中,a++ 的值是遞增前的0而為偽,因此不執行 b++,只有 a 變成1。第2個 if 中,a++ 的值是1而為真,因此同樣不執行 b++,a 變成2。在右邊寫入 ++ 或函式呼叫等有副作用的運算式時,要注意它是否執行會隨左邊的值而改變。
- A. 正確。兩個 if 中,右邊的 b++ 都沒有執行。
- B. 這是認為其中一個 if 執行了一次 b++ 時的值。兩者都由左邊決定結果,因此不會求值。
- C. 這是認為兩個 b++ 都執行時的值。兩者都由左邊決定結果,因此不會求值。