C语言传递函数指针是一种非常常见的程序设计方法,通常用于在函数之间传递一个函数的地址,以便让另一个函数调用它。
以下是使用函数指针的一般步骤:
- 声明函数指针变量
int (*func_ptr)(int, int);
上面的语句声明了一个名为func_ptr的函数指针,它指向一个返回类型为int、两个int类型参数的函数。
- 赋值函数指针变量
func_ptr = &add;
上面的语句把指向add函数的地址赋值给了函数指针变量func_ptr。
- 通过函数指针调用函数
int result = (*func_ptr)(10, 20);
上面的语句使用函数指针变量func_ptr来调用add函数,并将10和20作为参数传递给它,结果将被存储在result变量中。
下面是两个示例说明:
- 示例一:计算两个数的和
#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函数来计算两个数的和。
- 示例二:查找数组中的最值
#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函数通过函数指针来查找数组中的最大值和最小值。