读书人

不明白啊为何两个函数指针指向不同的

发布时间: 2013-02-18 10:50:49 作者: rapoo

不明白啊,为什么两个函数指针,指向不同的地方,却调用了同一个函数?
本帖最后由 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指针所指向的地址













[解决办法]
这种&(Base::f);玩意获取的是函数f在base内的偏移地址
另外一种是对象地址加偏移

读书人网 >C++

热点推荐