C語言基礎

int add(int a, int b) { return a + b; }
int mul(int a, int b) { return a * b; }
int main(void) {
    int (*op[2])(int, int) = {add, mul};
    int r = 1;
    for (int i = 0; i < 2; i++)
        r = op[i](r, 3);
    printf("%d\n", r);
    return 0;
}

執行上方使用函式指標陣列的程式時的輸出,下列何者正確?

  1. A3
  2. B6
  3. C12
查看答案與解析

正確答案:C. 12

op 是排列了兩個指向「接收兩個 int 並回傳 int 之函式」的指標的陣列,op[0] 放入 add 的位址,op[1] 放入 mul 的位址。op[i](r, 3) 會呼叫該指標所指向的函式。i = 0 時 r = add(1, 3) = 4,i = 1 時 r = mul(4, 3) = 12。函式指標用於切換處理的表、中斷向量、回呼等。

  • A. 這是認為每次都從 r = 1 計算,只留下最後的 mul(1, 3) = 3 時的值。
  • B. 這是先呼叫 mul、後呼叫 add 時的值(1 × 3 = 3、3 + 3 = 6)。
  • C. 正確。add(1, 3) = 4,接著 mul(4, 3) = 12。
練習這個領域 前往領域頁面

C語言基礎的其他題目

  1. fill 與 use 是另外定義的函式。上方函式的問題點,下列何者正確?
  2. 關於上方函式 make 所回傳的指標,下列何者正確?
  3. C語言中,建議在 free(p); 之後立刻寫 p = NULL; 的理由,下列何者最適當?
  4. 把8個字元的字串 "ABCDEFGH" 傳給上方的函式 save。會發生的事,下列何者正確?
  5. C語言中,參考 NULL 指標(p 為 NULL 時讀取 *p)時的說明,下列何者正確?