关于函数指针有个比较牛逼的文章:
http://blog.youkuaiyun.com/wj_1986/article/details/6567545/
假定我们有个调用函数:
void fun(char, int)
{
...
}
1.定义一个函数指针:
void (*pf)(char, int);
赋值:pf = fun;或者pf=&fun;
调用:pf(..);或者(*pf)(..);
2.定义一个函数指针类型:只是将函数指针定义成类型,实体用法跟上面一样
typedef void (*pf)(char, int);
pf uFun;
赋值:uFun = fun;或者uFun=&fun;
调用:uFun(..);或者(*uFun)(..);
3.定义类的函数指针类型:
class a;
typedef int (a::*xxx)(void);//指定xxx只能指向a的成员函数
class a
{
public:
xxx myint;
a():myint(&a::func){}
int func(void){printf("%s,%d\n",__FILE__,__LINE__);}
void func2(void){(this->*myint)();}//调用必须使用对象
static void func3(void){printf("%s,%d\n",__FILE__,__LINE__);}
};
a usec;
void (*pf)(char, int) = a::func3或者&a::func3;//func3是静态的可以直接使用。
typedef int (a::*xxx)(void);//指定xxx只能指向a的成员函数
调用:(usec.*uxxx)();//必须使用对象来调用该函数指针。