如何在C中创建“函数指针”(和(例如)函数有参数)?
答案 0 :(得分:15)
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; }
答案 1 :(得分:5)
typedef int (*funcptr)(int a, float b);
funcptr x = some_func;
int a = 3;
float b = 4.3;
x(a, b);
答案 2 :(得分:0)
当我第一次潜入函数指针时,我发现这个网站很有帮助。
答案 3 :(得分:0)
首先声明一个函数指针:
typedef int (*Pfunct)(int x, int y);
几乎与功能原型相同。
但是现在你创建的只是一种函数指针(typedef
)
所以现在你创建一个这种类型的函数指针:
Pfunct myFunction;
Pfunct myFunction2;
现在为这些地址分配功能地址,您可以像使用它们一样使用它们:
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)));
功能指针非常有趣。
答案 4 :(得分:0)
此外,我们可以创建函数指针数组:
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;
}
答案 5 :(得分:0)
您还可以定义返回函数指针的函数:
int (*f(int x))(double y);
f是一个函数,它接受一个int参数并返回一个指向函数的指针,该函数接受一个double参数并返回int。