首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

不明白啊为何两个函数指针,指向不同的地方,却调用了同一个函数

2013-02-18 
不明白啊,为什么两个函数指针,指向不同的地方,却调用了同一个函数?本帖最后由 ngbbxt 于 2013-01-24 16:56

不明白啊,为什么两个函数指针,指向不同的地方,却调用了同一个函数?
本帖最后由 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内的偏移地址
另外一种是对象地址加偏移

热点排行