C中的function指针

如何在C中创建“函数指针”(和(例如)函数有参数)?

http://www.newty.de/fpt/index.html

typedef int (*MathFunc)(int, int); int Add (int a, int b) { printf ("Add %d %d\n", a, b); return a + b; } int Subtract (int a, int b) { printf ("Subtract %d %d\n", a, b); return a - b; } int Perform (int a, int b, MathFunc f) { return f (a, b); } int main() { printf ("(10 + 2) - 6 = %d\n", Perform (Perform(10, 2, Add), 6, Subtract)); return 0; } 
  typedef int (*funcptr)(int a, float b); funcptr x = some_func; int a = 3; float b = 4.3; x(a, b); 

当我第一次潜入函数指针时,我发现这个网站很有帮助。

http://www.newty.de/fpt/index.html

首先声明一个函数指针:

 typedef int (*Pfunct)(int x, int y); 

几乎与函数原型相同。
但是现在你所创建的是一种函数指针(带有typedef )。
所以现在你创建一个这种类型的函数指针:

 Pfunct myFunction; Pfunct myFunction2; 

现在为这些地址分配function地址,你可以像使用它们一样使用它们:

 int add(int a, int b){ return a + b; } int subtract(int a, int b){ return a - b; } . . . myFunction = add; myFunction2 = subtract; . . . int a = 4; int b = 6; printf("%d\n", myFunction(a, myFunction2(b, a))); 

function指针非常有趣。

另外,我们可以创建函数指针数组:

 double fun0(double x, double y) { return x + y; } double fun1(double x, double y) { return x - y; } double fun2(double x, double y) { return x / y; } int main(int argc, char*argv[]) { const int MaxFunSize = 3; double (*funPtr[MaxFunSize])(double, double) = { fun0, fun1, fun2 }; for(int i = 0; i < MaxFunSize; i++) printf("%f\n", funPtr[i](2.5, 1.1)); return 0; } 

您还可以定义返回函数指针的函数:

 int (*f(int x))(double y); 

f是一个函数,它接受一个int参数并返回一个指向一个带有double参数并返回int的函数的指针。