回调函数与函数指针

函数指针

指针 地址,函数指针既是函数地址,函数名也是一个函数地址,是一个函数指针常量

下边c++虚函数表的解析陈皓的博文中也涉及到函数指针的内容,以此为例分析一下函数指针吧。

`class Base{
public:
	virtual void f(){cout<<"Base::f"<<endl;}
	virtual void g(){cout<<"Base::g"<<endl;}
	virtual void h(){cout<<"Base::h"<<endl;}
};

//然后我们Base的实例来得到虚函数表
typedef void(*Fun)(void);
Base b;
Fun pFun = NULL;
cout<<"虚函数表地址:"<<(int*)(&b)<<endl;
cout<<"虚函数表-第一个函数地址:"<<(int*)*(int*)(&b)<<endl;
pFun = (Fun)*((int*)*(int*)(&b));
//pFun = (Fun)*((int*)*(int*)(&b) + 0);//Base::f
//pFun = (Fun)*((int*)*(int*)(&b) + 1);//Base::g
//pFun = (Fun)*((int*)*(int*)(&b) + 2);//Base::h
pFun();`

回调函数

回调函数:一个函数的参数是另一个函数的地址。 例子:

void print(int test()){
	printf("%d\n", test());
}

int return1(){
	return 1;
}
int return2(){
	return 2;
}

int main(void)
{
	print(&return1);
	print(&return2);
	getchar();
}