小编典典

如何在 C 中将函数作为参数传递?

all

我想创建一个函数,在一组数据上执行由参数传递的函数。如何在 C 中将函数作为参数传递?


阅读 117

收藏
2022-03-02

共1个答案

小编典典

宣言

带有函数参数的函数原型如下所示:

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是指向所需函数的指针的名称,我们首先回忆一下 iff是指针
then*f是指向的东西f(即print本例中的函数)。因此,只需将上面循环中的每次 print 替换为*f

void func ( void (*f)(int) ) {
  for ( int ctr = 0 ; ctr < 5 ; ctr++ ) {
    (*f)(ctr);
  }
}

资源

2022-03-02