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;
}執行上方使用函式指標陣列的程式時的輸出,下列何者正確?
- A3
- B6
- 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。