不明白啊,为什么两个函数指针,指向不同的地方,却调用了同一个函数?
本帖最后由 ngbbxt 于 2013-01-24 16:56:42 编辑 下面f2和f3都是函数指针,执行后,输出内容一样,应该是指向同一个函数的。
但是,为什么输出它们所指向的地址,却有不相等呢?
class Base {
public:
Base()
{
cout<<"Base()::this "<<this<<endl;
}
virtual void f(int i)
{
cout<< "Base::f() "<<this<<" "<<i<<endl;
}
};
Base b;
typedef void(__thiscall Base::*Fun1)(int);
typedef void(__thiscall *Fun2)(Base*, int);
Fun1 f1 = &(Base::f); //直接获取成员函数Base::f的地址。
int* xx = (int*)(&f1);
Fun2 f2 = (Fun2)(*xx);
Fun2 f3 = (Fun2)*((int*)*(int*)(&b));//这里是通过访问虚表,来获取成员函数Base::f的地址。
f2(&b,2009); //执行对象b的成员函数Base::f
f3(&b,2009); //执行对象b的成员函数Base::f
cout<<f2<<endl; //输出f2指针所指向的地址
cout<<f3<<endl; //输出f3指针所指向的地址