C语言传递函数指针

  • Post category:C

C语言传递函数指针是一种非常常见的程序设计方法,通常用于在函数之间传递一个函数的地址,以便让另一个函数调用它。

以下是使用函数指针的一般步骤:

  1. 声明函数指针变量
int (*func_ptr)(int, int);

上面的语句声明了一个名为func_ptr的函数指针,它指向一个返回类型为int、两个int类型参数的函数。

  1. 赋值函数指针变量
func_ptr = &add;

上面的语句把指向add函数的地址赋值给了函数指针变量func_ptr。

  1. 通过函数指针调用函数
int result = (*func_ptr)(10, 20);

上面的语句使用函数指针变量func_ptr来调用add函数,并将10和20作为参数传递给它,结果将被存储在result变量中。

下面是两个示例说明:

  1. 示例一:计算两个数的和
#include <stdio.h>

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

int calculate(int (*func_ptr)(int, int), int a, int b)
{
    return (*func_ptr)(a, b);
}

int main()
{
    int (*func_ptr)(int, int);
    func_ptr = &add;
    int result = calculate(func_ptr, 10, 20);
    printf("The result is %d\n", result);
    return 0;
}

上面的代码中声明了一个add函数用来计算两个数的和,声明了一个calculate函数用来调用传递进来的函数指针,最后在主函数中调用calculate函数来计算两个数的和。

  1. 示例二:查找数组中的最值
#include <stdio.h>

int max(int a, int b)
{
    return a > b ? a : b;
}

int min(int a, int b)
{
    return a < b ? a : b;
}

int find(int (*func_ptr)(int, int), int arr[], int n)
{
    int result = arr[0];
    for (int i = 1; i < n; i++)
    {
        result = (*func_ptr)(result, arr[i]);
    }
    return result;
}

int main()
{
    int arr[] = {10, 20, 30, 40, 50};
    int (*func_ptr)(int, int);
    func_ptr = &max;
    int max_value = find(func_ptr, arr, 5);
    printf("The max value is %d\n", max_value);
    func_ptr = &min;
    int min_value = find(func_ptr, arr, 5);
    printf("The min value is %d\n", min_value);
    return 0;
}

上面的代码中声明了一个max函数用来计算两个数中的最大值,声明了一个min函数用来计算两个数中的最小值,声明了一个find函数用来在数组中查找最值,最后在主函数中调用find函数通过函数指针来查找数组中的最大值和最小值。