C语言返回函数指针

  • Post category:C

一、什么是函数指针

函数指针,就是指向函数的指针,它存储着函数的地址。和普通指针一样,函数指针可以进行赋值、传递、调用等操作。

二、如何声明函数指针

函数指针的声明格式为:返回值类型 (*函数指针变量名)(参数列表)。

比如,下面是一个声明一个指向int类型函数的指针的例子:

int (*p)(int, int);

意思是声明了一个指向返回值为int类型,带两个int类型参数的函数的指针变量p。

三、C语言返回函数指针

C语言中,函数可以返回指针类型的值,同样的,函数也可以返回一个指向函数的指针。

函数返回指针变量的方法与普通变量的方法相同。只要在函数的返回类型前加上指向函数的指针符号(*)即可。

例如,下面是一个返回指向函数的指针的示例:

int (*func1(int a))(int, int){   // 返回类型为指向返回值为int,带两个int参数的函数的指针的函数
    printf("This is func1\n");
    int (*p)(int, int) = NULL;
    if(a == 0)
        p = sum;
    else
        p = minus;
    return p;
}

上述代码中,func1是一个函数,它的返回值是一个指向返回值为int类型且带两个int类型参数的函数的指针。

当a为0时,func1返回sum函数的指针;否则返回minus函数的指针。

下面是sum和minus函数的声明:

int sum(int a, int b);
int minus(int a, int b);

sum和minus函数都是返回值为int类型且带两个int类型参数的函数。

四、函数指针的使用

函数指针可以用于回调函数中,也可以用于实现函数的动态调用。

1、回调函数

回调函数,是指由调用者指定的、在适当的条件下由被调函数调用的函数,是一种常见的编程方式。

下面是一个使用回调函数的示例:

void callback(int a, int b, int (*p)(int, int)){
    int result = p(a, b);
    printf("The result is %d\n", result);
}

int sum(int a, int b){
    return a + b;
}

int main(){
    callback(1, 2, sum);
    return 0;
}

上述代码中,callback函数的第三个参数是一个指向返回值为int类型、带两个int类型参数的函数的指针。在callback函数中,使用该指针变量调用函数p,返回相应的结果。

在main函数中,调用callback函数,并传递sum函数的指针作为第三个参数。

程序输出结果为:The result is 3,即1和2的和。

2、动态调用函数

动态调用函数,是指在程序运行时根据需要来确定要调用的函数。

下面是一个动态调用函数的示例:

#include <stdio.h>
#include <stdlib.h>

int sum(int a, int b){
    return a + b;
}

int minus(int a, int b){
    return a - b;
}

int main(){
    int a = 10, b = 5;
    char op = '-';
    int (*p)(int, int) = NULL;

    if(op == '+')
        p = sum;
    else if(op == '-')
        p = minus;

    if(p != NULL)
        printf("%d %c %d = %d\n", a, op, b, p(a, b));

    return 0;
}

上述代码中,通过定义一个指向返回值为int类型、带两个int类型参数的函数的指针变量p,根据不同的op值来动态指定要调用的函数。

如果op为‘+’,就指定p为sum指针;如果op为‘-’,就指定p为minus指针。

最后通过调用p变量的方式来调用对应的函数,返回相应的结果。

程序输出结果为:10 – 5 = 5。