C语言中的回调

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

       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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值