宣言
采用函数参数的函数的原型如下所示:
void func ( void (*f)(int) );
这说明参数f将是一个指向一个函数的指针,该函数有一个void返回类型,并且它接受一个int参数。以下函数(print)是一个函数的示例,可以将其作为参数传递给func,因为它是正确的类型:
void print ( int x ) {
printf("%d\n", x);
}
函数调用
当使用函数参数调用函数时,传递的值必须是指向函数的指针。使用函数的名称(不带括号):
func(print);
将调用func,传递打印函数。
功能体
与任何参数一样,func现在可以在函数体中使用参数的名称来访问参数的值。让我们说func将应用传递给数字0-4的函数。考虑,首先,什么回路看起来像直接调用print:
for ( int ctr = 0 ; ctr < 5 ; ctr++ ) {
print(ctr);
}
因为func的参数声明说f是指向期望函数的指针的名字,我们首先回顾如果f是一个指针,那么* f是f指向的东西(即在这种情况下的函数print)。结果,只需在上面的循环中用* f替换每次出现的print:
void func ( void (*f)(int) ) {
for ( int ctr = 0 ; ctr < 5 ; ctr++ ) {
(*f)(ctr);
}
}