我想创建一个函数,在一组数据上执行由参数传递的函数。如何在 C 中将函数作为参数传递?
宣言
带有函数参数的函数原型如下所示:
void func ( void (*f)(int) );
这表明参数f将是一个指向函数的指针,该函数具有void返回类型并且采用单个int参数。以下函数 ( print) 是可以func作为参数传递的函数的示例,因为它是正确的类型:
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是指向所需函数的指针的名称,我们首先回忆一下 iff是指针 then*f是指向的东西f(即print本例中的函数)。因此,只需将上面循环中的每次 print 替换为*f:
*f
void func ( void (*f)(int) ) { for ( int ctr = 0 ; ctr < 5 ; ctr++ ) { (*f)(ctr); } }
资源