C/C++指向函数的指针问题

vincentcoll 2011-05-26 08:05:15
在c中,我们知道函数名,代表函数的首址...
直接可以用int (*p)( )=f; //f为一个非类的普通函数
调用函数时也可以直接:p( );
而在C++类中的类函数,定义指向函数的指针时必须加&,如:
int (point::*function_p)( )=&point::getx;//point 为类,getx为类中函数
使用函数时也必须用:(p1.*function_p)( );
这是为什么呢??函数名不是代表函数的首址吗,赋给函数指针时为什么还要取地址呢??
C语言都是这样的,C++为什么不一样呢??
...全文
87 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
5t4rk 2011-05-27
  • 打赏
  • 举报
回复
呵呵,楼主其实有的老编译器是可以不用
&符号的。
推荐楼主看看

http://wenku.baidu.com/view/bd107ddaa58da0116c174945.html
www_adintr_com 2011-05-26
  • 打赏
  • 举报
回复
各种编译平台下指针的大小:

Compiler Options int DataPtr CodePtr Single Multi Virtual Unknown
MSVC 4 4 4 4 8 12 16
MSVC /vmg 4 4 4 16# 16# 16# 16
MSVC /vmg /vmm 4 4 4 8# 8# -- 8
Intel_IA32 4 4 4 4 8 12 16
Intel_IA32 /vmg /vmm 4 4 4 4 8 -- 8
Intel_Itanium 4 8 8 8 12 16 20
G++ 4 4 4 8 8 8 8
Comeau 4 4 4 8 8 8 8
DMC 4 4 4 4 4 4 4
BCC32 4 4 4 12 12 12 12
BCC32 /Vmd 4 4 4 4 8 12 12
WCL386 4 4 4 12 12 12 12
CodeWarrior 4 4 4 12 12 12 12
XLC 4 8 8 20 20 20 20
DMC small 2 2 2 2 2 2 2
medium 2 2 4 4 4 4 4
WCL small 2 2 2 6 6 6 6
compact 2 4 2 6 6 6 6
medium 2 2 4 8 8 8 8
large 2 4 4 8 8 8 8
vcf_reader 2011-05-26
  • 打赏
  • 举报
回复
楼主误解了。
在C++中,(普通)函数的指针和在C中是一样的。
类中的函数,则有其特殊性。
龙行天下之Sky 2011-05-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sky101010ws 的回复:]

函数名依然是函数的地址,但在C++中,编译器在处理函数的时候,偷偷给函数加了个this指针
即指向函数所属的类
[/Quote]
其他的没有什么区别
龙行天下之Sky 2011-05-26
  • 打赏
  • 举报
回复
函数名依然是函数的地址,但在C++中,编译器在处理函数的时候,偷偷给函数加了个this指针
即指向函数所属的类
www_adintr_com 2011-05-26
  • 打赏
  • 举报
回复
C++ 的成员函数指针不只是函数地址,其大小也肯能不只 4 个字节。

64,652

社区成员

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

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