如何将函数作为参数传递?

时间:2012-09-13 10:52:06

标签: c function-pointers

如何将函数(B)作为参数给出函数(A)?

这样我就可以在函数B中使用函数A.

与以下示例中的变量B类似:

foo(int B) { ... }

3 个答案:

答案 0 :(得分:4)

使用函数指针。例如,查看qsort()标准库函数。

示例:

#include <stdlib.h>

int op_add(int a, int b)
{
  return a + b;
}

int operate(int a, int b, int (*op)(int, int))
{
  return op(a, b);
}

int main(void)
{
  printf("12 + 4 is %d\n", operate(12, 4, op_add));

  return EXIT_SUCCESS;
}

将打印12 + 4 is 16

该操作作为指向函数的指针给出,该函数在operate()函数内调用。

答案 1 :(得分:2)

假设您有一个想要呼叫的功能:

void foo() { ... }

你想从bar

调用它
void bar(void (*fun)())
{
    /* Call the function */
    fun();
}

然后可以像这样调用bar

bar(foo);

答案 2 :(得分:2)

在另一个函数的参数列表中写函数指针类型看起来有点奇怪,特别是当指针很复杂时,建议使用typedef。

实施例

#include <stdio.h>

typedef int func(int a, int b);

int add(int a, int b) { return a + b; }

int operate(int a, int b, func op)
{
    return op(a, b);
}

int main()
{
    printf("%d\n", operate(3, 4, add));
    return 0;
}