声明函数指针
int(*funcP)(int a,int b)
指针指向函数
int(*funcP)(int a,int b)=func1;
通过指针调用函数
(*funcP)(5);
int ret=(*funcP)(5);带返回值
函数中传入函数
int dowork(int a,int b,int (*callback)())
{
......
int ret=(*callback)();
}
回调函数/钩子函数 :应用到函数中插入代码/多线程中

函数指针的定义和调用
回调函数 钩子函数 函数指针(可以插入函数)


函数指针的声明方法为:
返回值类型 ( * 指针变量名) ([形参列表]);
注1:“返回值类型”说明函数的返回类型,“(指针变量名 )”中的括号不能省,括号改变了运算符的优先级。若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
或者使用下面的方法将函数地址赋给函数指针:
f = &func;
#include <stdio.h>
int myFunc(int, int, int(*callBack)());
int funcA();
int funcB();
int funcC();
int main(int argc, char** argv)
{
myFunc(4, 5, funcA);
myFunc(5, 1, funcB);
return 0;
}
int myFunc(int a, int b, int(*callBack)())
{
int c = a + b;
int d = b + c;
(*callBack)();
return 0;
}
int funcA()
{
printf("funcA\n");
return 0;
}
int funcB()
{
printf("funcB\n");
return 0;
}
回调函数、钩子函数

指正指向函数


函数指针funcp指向函数funcl;
int (*funcP)(int a)=funcl;
int 函数返回值类型
funcP 指针名
int a 函数输入值
funcl 指针指向的函数
int ret=(*funcP)(5);
通过指针调用函数,将返回值赋给ret



函数返回值类型+(指针变量名)+(函数传入的参数)=函数名

第25行的代码表示用指针的形式调用函数


dowork()回调函数的用法