下面是一个回调函数的例子:
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是一个指针;;
阅读(952) | 评论(0) | 转发(0) |