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

标签 c function pointers syntax parameters

我想创建一个函数,该函数对一组数据执行通过参数传递的函数。在 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);
  }
}

Source

关于c - 在 C 中如何将函数作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58372121/

相关文章:

c - 为什么当输入是 (char) 和 'A' 时 sizeof() 返回不同的值

c - 排序时出现段错误

c++ - 我应该如何将此 std::array<> 传递给函数?

ios - 如何在文本字段 swift ios 中输入 4 个字母后添加功能

c - K&R练习5-3 : passing pointers to functions

c++ - 当我只有一个指向数据的空指针时,使用 printf 打印字符

c++ - 将在构造函数中创建的项目指针分配给类属性

在位域上转换 uint64_t

c - 如何将文件中的文本放入数组中

function - 如何以或方式组合两个 bool 函数?