自学到线程池 被各种函数指针的套娃操作套蒙了, 所以写一篇来总结一下。
首先要搞清楚几个事情
函数指针和指针函数
函数指针是指针,可以指向任一“同类型”的函数
指针函数是函数,这个函数的返回值是指针 如 int * max(int , int );
钩子函数实际上就是函数指针,首先看下什么是函数指针:
1.函数指针:
函数指针是指向函数的指针变量。 因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针
有两个用途:调用函数和做函数的参数。(来自百度百科)
2.函数指针的声明方法
返回值类型 ( * 指针变量名) ([形参列表]);
举例如下图(pFun 应该是function pointer的缩写吧,我看到好多资料都这么命名,所以我照猫画虎)
这个时候我们就可以来使用一下
#include <stdio.h>
//函数功能模块
int max(int a, int b){
if(a > b)
return a;
return b;
}
int min(int a, int b){
if(a > b)
return b;
return a;
}
int main(int argc, char *argv[]){
//根据上面的功能函数具有的特征来定义一个函数指针 (函数指针就是指向函数的指针!!!!别绕晕了)
int (*pFun)(int x, int y