类成员函数指针的诡异现象。是我个例?

benbshmily 2010-07-02 11:47:15
class Derive
{
public:
int i;
virtual void f() { cout << "Derive::f" << endl; }

void g(int i) { cout << "Derive::g(int):i" << endl; }

void h() { cout << "Derive::h" << endl; }

};
int main()
{
void (Derive::*p)(int) = &Derive::g;
cout<<hex<<p<<endl;
printf("%#x", p);
system("pause");
return 0;
}


运行后输出时
1
0x411143//这个是g函数的正确地址。
我想问下,为啥cout<<p<<endl;输出1,这个不是和下面的printf语句一样的意思么?求达人解释。
...全文
104 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
benbshmily 2010-07-02
  • 打赏
  • 举报
回复
哦,谢谢大家。
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 benbshmily 的回复:]

引用 1 楼 taodm 的回复:

因为指向成员的指针不是指针。


为什么不是指针的呢?有介绍这方面的文章吗?麻烦推荐下,谢谢了
[/Quote]
http://blog.csdn.net/akirya/archive/2009/01/18/3825040.aspx
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 benbshmily 的回复:]

引用 1 楼 taodm 的回复:

因为指向成员的指针不是指针。


为什么不是指针的呢?有介绍这方面的文章吗?麻烦推荐下,谢谢了
[/Quote]
sizeof(成员函数指针) 结果不一定是 sizeof(指针)
pengzhixi 2010-07-02
  • 打赏
  • 举报
回复
成员函数指针里面要包含比较多的信息,比如,该函数是否是虚函数,如果是,那要怎么样通过vptr找到这个虚函数等等,所以它不是一个简单的指针。
benbshmily 2010-07-02
  • 打赏
  • 举报
回复
如果不是指针,那为什么printf能打印出函数的地址呢?不解
pengzhixi 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 benbshmily 的回复:]
引用 1 楼 taodm 的回复:

因为指向成员的指针不是指针。


为什么不是指针的呢?有介绍这方面的文章吗?麻烦推荐下,谢谢了
[/Quote]
可以去看看C++必知必会。
benbshmily 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 taodm 的回复:]

因为指向成员的指针不是指针。
[/Quote]

为什么不是指针的呢?有介绍这方面的文章吗?麻烦推荐下,谢谢了
baihacker 2010-07-02
  • 打赏
  • 举报
回复
cout<<boolalpha<<hex<<p<<endl;//这样就明白了
taodm 2010-07-02
  • 打赏
  • 举报
回复
因为指向成员的指针不是指针。

64,680

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧