没有合适的资源?快使用搜索试试~ 我知道了~
回调函数---第二种讲解方式
4星 · 超过85%的资源 需积分: 9 15 下载量 115 浏览量
2011-05-11
16:38:04
上传
评论
收藏 50KB DOC 举报
温馨提示
试读
14页
采用C/C++语言来讲解分析的回调函数, 一共有5个代码示例,看完2遍,你真差不多很懂了。
资源推荐
资源详情
资源评论
SZ45678
回调函数是一个程序员不能显式调用的函数;通过将回调函数的
地址传给调用者从而实现调用。要实现回调,必须首先定义函数指
针。尽管定义的语法有点不可思议,但如果你熟悉函数声明的一般
方法,便会发现函数指针的声明与函数声明非常类似。函数指针有
两具用途:调用函数和做函数的参数。请看下面的例子:
void f();// 函数原型
上面的语句声明了一个函数,没有输入参数并返回 void。那么函数
指针的声明方法如下:
void (*) ();
让我们来分析一下,左边圆括弧中的星号是函数指针声明的关键 。
另外两个元素是函数的返回类型(void)和由边圆括弧中的入口参
数(本例中参数是空)。注意本例中还没有创建指针变量-只是声明
了变量类型。目前可以用这个变量类型来创建类型定义名及用 sizeof
表达式获得函数指针的大小:
// 获得函数指针的大小
unsigned psize = sizeof (void (*) ());
// 为函数指针声明类型定义
typedef void (*pfv) ();
pfv 是一个函数指针,它指向的函数没有输入参数,返回类行为
void。使用这个类型定义名可以隐藏复杂的函数指针语法
【函数指针】
在程序运行中,函数代码是程序的算法指令部分,它们和数组
一样也占用存储空间,都有相应的地址。可以使用指针变量指向数
组的首地址,也可以使用指针变量指向函数代码的首地址,指向函
数代码首地址的指针变量称为函数指针。
1.函数指针定义
函数类型 (*指针变量名)(形参列表);
“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指
针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的
函数所带的参数列表。
例如:
int (*f)(int x);
double (*ptr)(double x);
在定义函数指针时请注意:
函数指针和它指向的函数的参数个数和类型都应该是—致的;
函数指针的类型和函数的返回值类型也必须是一致的。
2.函数指针的赋值
函数名和数组名一样代表了函数代码的首地址,因此在赋值时,直
接将函数指针指向函数名就行了。
例如,
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将 func 函数的首地址赋给指针 f */
赋值时函数 func 不带括号,也不带参数,由于 func 代表函数的首地
址,因此经过赋值以后,指针 f 就指向函数 func(x)的代码的首地址。
3.通过函数指针调用函数
函数指针是通过函数名及有关参数进行调用的。
与其他指针变量相类似,如果指针变量 pi 是指向某整型变量 i 的指
针,则*p 等于它所指的变量 i;如果 pf 是指向某浮点型变量 f 的指
针,则*pf 就等价于它所指的变量 f。同样地,*f 是指向函数 func(x)
的指针,则*f 就代表它所指向的函数 func。所以在执行了 f=func;之
后,(*f)和 func 代表同一函数。
由于函数指针指向存储区中的某个函数,因此可以通过函数指针调
用相应的函数。现在我们就讨论如何用函数指针调用函数,它应执
行下面三步:
首先,要说明函数指针变量。
例如:int (*f)(int x);
其次,要对函数指针变量赋值。
例如: f=func; (func(x)必须先要有定义)
最后,要用 (*指针变量)(参数表);调用函数。
例如: (*f)(x);(x 必须先赋值)
【例】任意输入 n 个数,找出其中最大数,并且输出最大数值。
main()
{
int f();
int i,a,b;
int (*p)(); /* 定义函数指针 */
scanf('%d',&a);
剩余13页未读,继续阅读
资源评论
- 小付少2013-01-16示例比较有用。
jincf2011
- 粉丝: 165
- 资源: 39
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功