我想创建一个函数,该函数对一组数据执行通过参数传递的函数。在 C 中如何将函数作为参数传递?
最佳答案
声明
采用函数参数的函数原型(prototype)如下所示:
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
)。因此,只需将上面循环中出现的每个 print 替换为 *f
:
void func ( void (*f)(int) ) {
for ( int ctr = 0 ; ctr < 5 ; ctr++ ) {
(*f)(ctr);
}
}
关于c - 在 C 中如何将函数作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58372121/