Chinaunix首页 | 论坛 | 博客
  • 博客访问: 88605
  • 博文数量: 23
  • 博客积分: 870
  • 博客等级: 准尉
  • 技术积分: 210
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-02 16:52
文章存档

2011年(1)

2010年(1)

2009年(21)

我的朋友

分类: 嵌入式

2009-09-25 16:04:51

下面是一个回调函数的例子:
void     callback   myfunc(int   i,   int   ii)  
  {  
  int   nlen   =   0;  
  return   ;  
  }  
   
  typedef   void   (callback   *myfunc)(int,   int);  
   
  myfunc   tt;  
   
  tt   =   myfunc;  
   
  (*tt)(1,2);  
   
  tt(1,2);  
   
  问以下几个问题:  
  1   myfunc这个函数名是不是指向函数代码的指针?还是本身就是函数代码的地址?  
  2   tt   =   myfunc;后,为什么两者不同;  
  3   为什么tt和*tt相同?  

解释一:

 
typedef   void   (callback   *myfunc)(int,   int);//把myfunc定义成回调函数指针类型,返回类型为void,   参数列表:int,int  
   
  myfunc   tt;//定义一个回调函数指针  
   
  tt   =   myfunc;//初始化为指向myfunc,   myfunc为指向函数myfunc(int,   int)的指针  
   
  (*tt)(1,2);//函数体调用  
   
  tt(1,2);//函数指针调用

解释二:

tt   =   myfunc实际上这样子vc做了一些内部的处理,并不是简单的赋值  
  就是=的重载  
 

解释三:

1   myfunc这个函数名是不是指向函数代码的指针?还是本身就是函数代码的地址?  
  答:本身就是函数的起始地址  
  2   tt   =   myfunc;后,为什么两者不同  
  答:tt是个指针,去指向myfunc  
  3   为什么tt和*tt相同?  
  答:不是相同,tt是指针,是myfunc的起始地址,*tt是指针指向的内容,也就是myfunc函数。
个人认为:解释二比较有道理,即myfunc这符号是重载的,即(*tt)(1,2)时tt是一个指针;
tt(1,2)时tt是一个函数名(*tt)(1,2)时tt是一个指针;;
 
阅读(878) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~