Chinaunix首页 | 论坛 | 博客
  • 博客访问: 234981
  • 博文数量: 63
  • 博客积分: 2465
  • 博客等级: 大尉
  • 技术积分: 471
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-08 17:25
文章分类

全部博文(63)

文章存档

2011年(5)

2010年(41)

2009年(17)

我的朋友

分类: C/C++

2009-03-28 11:12:03

   今天遇到了函数指针的问题,很久以前学习过这方面的内容,但是都不怎么记得了,所以今天特别重新看温习一下,温故而知新,希望对自己有所帮助!

   和其他指针一样,指针指向内存中的存储地址,指向函数的指针保存着函数代码起始处的地址。


   指向函数的指针包含了函数的地址,可以通过它来调用函数。声明格式如下:
           类型说明符 (*函数名)(参数)
   其实这里不能称为函数名,应该叫做指针的变量名。这个特殊的指针指向一个返回整型值的函数。指针的声明笔削和它指向函数的声明保持一致。  
   例如:
         void (*fptr)();
   把函数的地址赋值给函数指针,可以采用下面两种形式:
           fptr=&Function;
           fptr=Function;
   表达式中的&操作符是可选的,因为函数名被使用时总是由编译器把它转换为函数指针,&操作符只是显式的说明了编译器将隐式执行的任务。
   可以采用如下两种方式来通过指针调用函数:
           x=(*fptr)();
           x=fptr();
   第二种格式看上去和函数调用无异。但是有些程序员倾向于使用第一种格式,因为它明确指出是通过指针而非函数名来调用函数的。
  

   但是对工作中实际使用的的一段代码心存疑问,代码如下:
   
   函数原型为:
           int assign_handler_function(const void (*handler_function)());
   调用时代码为:assign_handler_function((void *)*handler_function);
      handler_function的原型为:int handler_function(const int, ........);
   根据我的理解,调用的代码应为 assign_handler_function((void *)handler_function), 不应该多一个*操作符,盼望高手解答!
   
阅读(691) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:嵌入式Linux文件系统详细介绍

给主人留下些什么吧!~~