免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2400 | 回复: 4
打印 上一主题 下一主题

函数指针与回调函数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-30 15:35 |只看该作者 |倒序浏览

  1. #include<iostream>
  2. #include<string>

  3. using namespace std;

  4. bool a(string &str){
  5.         str="it's a";
  6.         return true;
  7. }

  8. bool b(string &str){
  9.         str="it's b";
  10.         return true;
  11. }

  12. bool (* ondo(string &str))(string &){
  13.         if(str=="a"){
  14.                 return a;
  15.         }else{
  16.                 return b;
  17.         }
  18. }

  19. int main(int argc,char *argv[]){
  20.         string str("a");
  21.         bool (*func)(string &)=ondo(str);
  22.         cout<<str<<endl;
  23.         func(str);
  24.         cout<<str<<endl;

  25.         return 0;
  26. }
复制代码

哪位大侠帮我解释一下这个小demo,谢谢了.

论坛徽章:
0
2 [报告]
发表于 2009-10-30 18:03 |只看该作者
指针就一个地址。

晓得不晓得撒?

想想汇编里的JMP指令吧,唉,你真可怜呀

论坛徽章:
0
3 [报告]
发表于 2009-10-30 18:07 |只看该作者
昨天面试,被问到为什么使用callback函数?我回答了callback的使用机制一番,结果对方说没有说到本质。
后来再想想,不知道他葫芦里卖的是什么关子。也许我当时应该就说一句callback无非是指针。--题外话。

其实lz困惑的应是如下的函数定义:
bool (* ondo(string &str))(string &){
        if(str=="a"){
                return a;
        }else{
                return b;
        }
}
解释为:
ondo是个函数,其参数为string &str,它的返回类型是函数指针,这个函数指针的类型为bool (*)(string &)

换个角度理解,上面的函数定义等价写法如下:
typedef bool (*func_p)(string &);
func_p ondo(string &str){
   .....
}

论坛徽章:
0
4 [报告]
发表于 2009-10-30 18:11 |只看该作者
真应该去看看专家编程、缺陷与陷阱、C和指针。

论坛徽章:
0
5 [报告]
发表于 2009-10-30 18:46 |只看该作者

回复 #3 foonix 的帖子

谢谢你的回答,呵呵.
我要写个小http server做练习
想使用回调函数,结果发现自己对函数指针很陌生
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP