C语言中的函数指针

3

如何在C语言中创建“函数指针”(例如,该函数有参数)?


可能是如何在C语言中使用函数指针?的重复问题。 - Peter Smit
5个回答

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; }

有趣的例子 - 一个浮点数和两个字符相加? - Graeme Perrow
当然,您一直想将3.145添加到“z”并将结果作为整数返回吗?!我将把示例更改为稍微合理一些的内容。 - John Millikin

5
    typedef int (*funcptr)(int a, float b);

    funcptr x = some_func;

    int a = 3;
    float b = 4.3;
    x(a, b);

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)));

函数指针非常有趣。


0

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

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

f 是一个接受单个 int 参数并返回一个接受 double 参数并返回 int 的函数指针。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接