码迷,mamicode.com
首页 > 编程语言 > 详细

C语言中的回调

时间:2015-05-16 09:13:20      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:

        回调函数就是通过一个函数指针调用的函数,如果把函数的指针作为实参传给另外一个一个函数,当这个指针被用来调用它指向的函数时,这个过程就是回调。

       c语言中的函数原型如下:void method();

       对应的函数指针声明:void (*)(),如果给该函数指针取一个变量名称p,则p指向这个函数的,可以声明为 void (*p)(),该函数指针无参数,返回值为void类型。

我们看一下如下例子:

void method(){
	printf("测试函数指针....\n");	
}
int main(){
       void (*p)();
	p = &method;// 	p = method;
	p();// 调用
}
上述代码先申明一个函数指针,并取变量名p,然后让p指向函数method,再执行p()调用,其实也就相当于method();


现在如果我们要把p传给其他的函数呢?看下面代码

void method(){
	printf("测试函数指针....\n");	
}
void callback(void (*p)()){
<span style="white-space:pre">	</span>p();
}
int main(){
	void (*p)();
	p = &method;// 	p = method;
	p();// 调用
	// 如果把p传给另外一个函数
	callback(p);	<span style="font-family: Arial, Helvetica, sans-serif;">	</span>
<span style="font-family: Arial, Helvetica, sans-serif;">}</span>
下面做一个综合的例子:情形是张三要买书,他先买了一本编程思想,可是同学们觉得不错,就再买了5本。

void buyProgramThink(){
	printf("张三买了编程思想一本\n");	
}

void bugProgramThinkAgain(int totalBooks){
	printf("张三再次买了编程思想%d本\n",totalBooks);
}

void buyFactory(int totalBooks,void (*buy)(int),void (*buy_)() ){
	if(totalBooks){
		(*buy)(totalBooks);
	}else{
		(*buy_)();
	}
}
int main(){
	void (*buyBook)(),(*buyBookAgain)(int);
	buyBook = &buyProgramThink;
	buyBookAgain = &bugProgramThinkAgain;
	buyFactory(0,buyBookAgain,buyBook);
	buyFactory(5,buyBookAgain,buyBook);
	return 0;
}	

技术分享


本文源自:http://blog.csdn.net/andywuchuanlong


C语言中的回调

标签:

原文地址:http://blog.csdn.net/andywuchuanlong/article/details/45750101

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!