Declaration
接受函数参数的函数的原型如下所示:
void func ( void (*f)(int) );
这说明参数f
将是指向具有void
返回类型并且接受单个int
参数的函数的指针.下面的函数(print
)是可以作为参数传递给func
的函数的示例,因为它是正确的类型:
void print ( int x ) {
printf("%d\n", x);
}
Function Call
使用函数参数调用函数时,传递的值必须是指向函数的指针.使用函数的名称(不带括号)执行以下操作:
func(print);
将调用func
,并将打印函数传递给它.
Function Body个
与任何参数一样,func
现在可以在函数体中使用该参数的名称来访问该参数的值.假设func
将应用它传递给数字0-4的函数.首先,考虑一下直接调用print的循环会是什么样子:
for ( int ctr = 0 ; ctr < 5 ; ctr++ ) {
print(ctr);
}
由于func
的参数声明表示f
是指向所需函数的指针的名称,因此我们首先回忆一下,如果f
是指针,那么*f
就是f
指向的对象(即本例中的函数print
).因此,只需将上面循环中出现的每一次打印替换为*f
:
void func ( void (*f)(int) ) {
for ( int ctr = 0 ; ctr < 5 ; ctr++ ) {
(*f)(ctr);
}
}