C语言中的回调函数(callback function)

网络上有很多对于对于回调函数的解释,还有人做了一些很有意思的比喻,比如下面这个:
回调函数(callback)是什么? - no.body的回答 - 知乎
打个比方,有一家旅馆提供叫醒服务,但是要求旅客自己决定叫醒的方法。可以是打客房电话,也可以是派服务员去敲门,睡得死怕耽误事的,还可以要求往自己头上浇盆水。这里,“叫醒”这个行为是旅馆提供的,相当于库函数,但是叫醒的方式是由旅客决定并告诉旅馆的,也就是回调函数。而旅客告诉旅馆怎么叫醒自己的动作,也就是把回调函数传入库函数的动作,称为登记回调函数(to register a callback function)。

但是其实对于C语言来说,只要记住回调函数就是函数指针在C语言中回调函数只能通过函数指针实现,我觉得就好理解多了,参考:回调函数-百度百科

而且StackOverflow上面也有人回答,在C语言里面没有什么“回调” ,see:
callback StackOverflow

下面给一个geeksforgeeks上面的比较简单的回调函数的例子,see: callback in c

// A simple C program to demonstrate callback
#include<stdio.h>

void A()
{
	printf("I am function A\n");
}

// callback function
void B(void (*ptr)())
{
	(*ptr) (); // callback to A
}

int main()
{
	void (*ptr)() = &A;
	
	// calling function B and passing
	// address of the function A as argument
	B(ptr);

return 0;
}

上述代码的结果是
I am function A

按照前文中那个知乎上的回答,main函数调用了B(就相当于库函数),B需要main函数提供一个函数指针作为它的参数,也就是这里的&A,即A的地址,把A的地址传给B的过程就叫登记回调函数,A就是回调函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值