C中的函数指针

时间:2009-08-14 16:28:44

标签: c pointers function-pointers

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

6 个答案:

答案 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)

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

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

答案 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。