pointers to functions 乍聽之下好像有點奇怪,
但一個 function 跟資料同樣都是要放在 main memory 裡的,
這麼想的話,可以有個 pointer 指到一個 function 的 memory address,也就不是很奇怪的事情了
double foo(int, int);
以上面的例子來說:foo
是一個 pointer to function,需要兩個 int
的參數
並且會回傳一個 double
的回傳值
下面是一個把 pointer to function 當成 function 參數的例子:
#include <stdio.h>
int add(int a, int b)
{
return a + b;
}
int mul(int a, int b)
{
return a * b;
}
/* 參數 op 是一個 pointer to function
* op 需要兩個 int 的參數
* 並且會回傳一個 int 的 return value
* do_op 的 body 裡可以使用這個參數 op */
int do_op(int a, int b, int c, int op(int, int))
{
int result;
result = op(a, b);
result = op(result, c);
return result;
}
int main()
{
int a, b, c, result1, result2;
a = 2;
b = 3;
c = 4;
/* func_ptr 是一個
* 1. pointer to
* 2. function with two int arguments
* 3. returning int */
int (*func_ptr)(int, int);
func_ptr = &mul; // 跟 &mul 的型別相同,所以可以 assign 過去
/* add 這個 function 被當成參數傳進去了 */
result1 = do_op(a, b, c, add);
/* *func_ptr (也就等同 mul) 被當成參數傳進去了 */
result2 = do_op(a, b, c, *func_ptr);
// result1 = 2 + 3 + 4 = 9
printf("result1 = %d\n", result1);
// result1 = 2 * 3 * 4 = 24
printf("result2 = %d\n", result2);
}
C Programming: A Modern Approach, 2/e