函数指针
函数名是执行函数体的入口地,函数名本身就是一个指针。函数指针是指向函数的指针,通过函数指针(函数的入口地址)就可以执行函数体。
对函数名取多少地址(&)都一样,以及取多少个*操作都一样还是其本身,这是一种语法现象。
可以用typedef定义一个函数类型,也可以定义一个指针函数类型的指针类型,亦可以直接定义一个函数指针。
看下面的例子:
#include<iostream>
using namespace std;
int func_test(int a,int b)
{
return a+b;
}
typedef int (*pFunc)(int,int);//定义指针函数类型
typedef int Func(int,int);//定义函数类型
int main()
{
int i_a, i_b, i_c;
Func *p_func1;//使用函数类型定义函数指针好比使用int 定义int *p;
pFunc p_func2; //指针函数类型定义一个函数指针
int (*p_func3)(int ,int);/* 直接定义一个函数指针 int 是返回值类型p_func3是函数指针名称,
(int,int)是函数的参数,这里也可以加参数名(int a,int b) */
p_func1 = func_test;
p_func2 = &func_test;//对函数名取多少地址都一样 这是一种语法现象
p_func3 = func_test;
i_b = p_func1(1,3);//通过指向函数类型的指针去调用函数
i_a = p_func2(1,3);
i_c = p_func3(1,3);
cout<<"i_a:"<<i_a<<"i_b:"<<i_b<<"i_c:"<<i_c<<endl;
system("pause");
return 0;
}
函数指针作用:
1.正向调用(加载动态库)
2.反向调用(回调)
回调函数是利用函数指针实现的一种调用机制
回调机制原理
当具体事件发生时,调用者通过函数指针调用具体函数
回调机制的将调用者和被调函数分开,两者互不依赖。