C語言基礎

int x = 5;
if (x = 0)
    printf("zero ");
else
    printf("nonzero ");
printf("%d\n", x);

執行上方在 if 敘述的條件中寫了 = 的程式碼時的輸出,下列何者正確?

  1. Azero 0
  2. Bnonzero 5
  3. Cnonzero 0
查看答案與解析

正確答案:C. nonzero 0

if 條件中的 x = 0 不是比較用的 ==,而是指派。x 被放入0,指派運算式的值也是0,因此條件判斷為偽,顯示 else 一側的「nonzero」。接著的 printf 顯示因指派而變成0的 x。在 gcc 中加上 -Wall 會對這種寫法發出警告,因此啟用警告比較容易發現錯誤。

  • A. 指派運算式的值是被指派的0,因此條件為偽,不會顯示 zero。
  • B. x = 0 不是比較而是指派,因此 x 已變成0。
  • C. 正確。x 被指派為0,條件為偽。
練習這個領域 前往領域頁面

C語言基礎的其他題目

  1. 為了檢查暫存器值 reg 的位元2是否為1,寫了上方的程式碼。執行時的結果,下列何者正確?
  2. uint8_t 是8位元的無號整數型別。執行上方程式碼時的輸出,下列何者正確?
  3. uint8_t 是8位元的無號整數型別。執行上方讓 x 遞增10次的程式碼時的輸出,下列何者正確?
  4. unsigned char 為8位元,int 為32位元。執行上方程式碼時的輸出,下列何者正確?
  5. uint8_t 是8位元的無號整數型別,int 為32位元。執行上方程式碼時的結果,下列何者正確?