CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

c++ primter中关于函数指针的

楼主warptenking(莫名其妙的人)2006-11-15 16:49:25 在 C/C++ / C++ 语言 提问

应该是   7.9.2节   函数指针的初始化   和赋值  
  里面说  
  象   数组名会被解释成   指向首元素的指针一样  
  函数名会被解释成   这个函数的指针  
  但是   里面提到  
  “将取地址操作符作用在函数名上也能产生指向该函数类型的指针因此lexicoCompare  
  和&lexioCompare   类型相同指向函数的指针可如下被初始化  
  int   (*pfi)(   const   string   &,   const   string   &   )   =   lexicoCompare;  
  int   (*pfi2)(   const   string   &,   const   string   &   )   =   &lexicoCompare;”  
  这个就不太懂了     难道   lexicoCompare   与   &lexicoCompare   是一样的?  
  数组可不是这样的啊?  
  请高手指点一下????? 问题点数:10、回复次数:13Top

1 楼taodm((不能收CSDN社区短信息,请莫浪费精力))回复于 2006-11-15 16:51:13 得分 0

C++Primer不是说了嘛,对函数指针,2者一样。  
  对数组,当然不一样,你会编译不通过的。  
  C/C++就这么规定的!Top

2 楼warptenking(莫名其妙的人)回复于 2006-11-15 16:57:18 得分 0

竟然有发广告的。。。。。  
  搞什么Top

3 楼weixing979(★★★闪电侠★★★)回复于 2006-11-15 16:58:58 得分 0

函数名就是指向函数的地址Top

4 楼lann64(昆仑大鹏@迦楼罗)回复于 2006-11-15 17:39:09 得分 0

这个是C语言的一个缺点,很容易使人产生误解。  
  对于一个函数名fun,对它取地址的得到的函数指针pfun跟fun一样,这跟普通指针的语法也不一样(毕竟,取指针的地址得到的是指向指针的指针)。  
  对一个函数指针你可以(*pfun)()调用函数,也可以pfun()调用函数。  
  可以用函数名这样调用fun(),也可以(*fun)()调用函数。  
  整个一混乱。这个缺点也被带到C++里了。  
  可以从这个程序看这些用法。  
  #include   <iostream>  
  using   namespace   std;  
  void   fun(void)  
  {  
  cout<<"函数调用"<<endl;  
  }  
  int   main()  
  {  
  void   (*pfun)();  
  void   (*pfun1)();  
   
  pfun=fun;  
  pfun1=&fun;  
   
  if((pfun1==pfun)&&(pfun1==fun))    
  cout<<"全都相等"<<endl;   //显示全都相等  
  else  
  cout<<"不全相等"<<endl;  
   
  pfun1();     //显示函数调用  
  (*pfun1)();     //同上  
  fun(); //同上  
  (*fun)(); //同上  
  }Top

5 楼warptenking(莫名其妙的人)回复于 2006-11-16 11:35:40 得分 0

太好了     加楼罗王  
  学到了。。。。Top

6 楼cime63(流浪的孩子)回复于 2006-11-16 12:05:42 得分 0

昨天刚看到第7章,说不定会用到,记号Top

7 楼pressman(大苯熊)回复于 2006-11-16 12:52:03 得分 0

我感觉是不是用法类似于字符数组的指针。  
  char   str[]="abcdef";  
  char   *p=str;  
  cout<<p<<endl;  
  cout<<str<<endl;Top

8 楼lann64(昆仑大鹏@迦楼罗)回复于 2006-11-16 13:36:54 得分 0

跟字符数组或指向字符的指针还不一样。你对字符数组名或指向字符的指针取地址,得到的是二级指针,但对函数名取地址,得到的还是它自己。Top

9 楼hzjtyh(小母牛背跃式跳高)回复于 2006-11-16 13:51:52 得分 0

楼上诸位解释的这么清楚  
  我只能接分了么   呵呵  
  同意   lann64(昆仑大鹏@迦楼罗)Top

10 楼zmzbs123(小阵阵)回复于 2006-11-16 15:37:03 得分 0

When   we   use   a   function   name   without   calling   it,   the   name   is   automatically   treated   as   a   pointer   to   a   functionTop

11 楼zmzbs123(小阵阵)回复于 2006-11-16 15:48:22 得分 0

原来如此呀,函数名的地址和函数名是同样的效果Top

12 楼ahking(aspire)回复于 2006-11-17 09:35:54 得分 0

我也在看此书,但是好像没有看到介绍事件的内容啊?Top

13 楼ahking(aspire)回复于 2006-11-28 20:35:09 得分 0

?Top

相关问题

关键词

得分解答快速导航

  • 帖主:warptenking

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo