函数指针有两种常用的用法,一种是作为结构体成员,另一种是函数指针作为函数的参数。
1、函数指针作为函数的参数
函数指针可以作为一个参数传递给另一个函数。这时函数指针的使用就像普通的常量和变量一样。当函数指针作为参数传递的时候,这时接收参数传递的函数通常需要根据这个指针调用这个函数。作为参数传递的函数指针通常表示回调函数(Callback Functions)。
回调函数已在之前一篇文章中有所介绍,下面我再举其他例子进行介绍。
什么是回调函数
函数指针可以作为一个参数传递给另一个函数。这时函数指针的使用就像普通的常量和变量一样。当函数指针作为参数传递的时候,这时接收参数传递的函数通常需要根据这个指针调用这个函数。作为参数传递的函数指针通常表示回调函数(Callback Functions)。
回调函数在实际中有什么作用
先假设有这样一种情况:我们要编写一个库,它提供了某些排序算法的实现(如冒泡排序、快速排序等等),为了能让库更加通用,不想在函数中嵌入排序逻辑,而让使用者来实现相应的逻辑;或者,能让库可用于多种数据类型(int、float、string),此时,该怎么办呢?可以使用函数指针,并进行回调。
例如,在C语言的通用工具库stdlib.h中,有如下一个函数原型:
void qsort(void *, size_t, size_t, int (comp*)(const void *, const void *))
这是在C通用工具库中声明的一个快速排序算法函数,其可以用来排序int类型、float类型以及字符串数据,可以按从小到大的顺序也可以按从大到小的顺序排序。其关键在于函数指针comp指向的函数的具体实现。
举例说明
使用函数指针作为函数参数来实现四则运算。
设计如下函数:
int calculate(int a, int b, fun_t operation)
{
int result;
result = operation(a, b); // 运算
return result;
}
其中,fun_t是一个函数指针,其定义为:
typedef int (*fun_t)