原文: https://beginnersbook.com/2014/01/c-function-pointers/

C 编程语言中,我们可以有一个概念,称为指向函数的指针。在本教程中,我们将学习如何声明函数指针以及如何使用此指针调用函数。要理解这个概念,你应该具备函数指针的基本知识。**

如何声明函数指针?

  1. function_return_type(*Pointer_name)(function argument list)

例如:

  1. double (*p2f)(double, char)

这里double是函数的返回类型,p2f是函数指针的名称,(double, char)是这个函数的参数列表。这意味着此函数的第一个参数是double类型,第二个参数是char类型。

让我们借助一个例子来理解这一点:这里我们有一个函数sum,它计算两个数字的总和并返回总和。我们创建了一个指向此函数的指针f2p,我们使用此函数指针f2p调用该函数。

  1. int sum (int num1, int num2)
  2. {
  3. return num1+num2;
  4. }
  5. int main()
  6. {
  7. /* The following two lines can also be written in a single
  8. * statement like this: void (*fun_ptr)(int) = &fun;
  9. */
  10. int (*f2p) (int, int);
  11. f2p = sum;
  12. //Calling function using function pointer
  13. int op1 = f2p(10, 13);
  14. //Calling function in normal way using function name
  15. int op2 = sum(10, 13);
  16. printf("Output1: Call using function pointer: %d",op1);
  17. printf("\nOutput2: Call using function name: %d", op2);
  18. return 0;
  19. }

输出:

Output1: Call using function pointer: 23
Output2: Call using function name: 23

关于函数指针的一些要点:

  1. 如注释中所述,您可以在单个语句中声明一个函数指针并为其赋值函数,如下所示:
void (*fun_ptr)(int) = &fun;
  1. 您甚至可以从此语句中删除&符号,因为单独的函数名称表示函数地址。这意味着上面的语句也可以这样写:
void (*fun_ptr)(int) = fun;