关于回调函数的本质及比喻和实例分析

#include <iostream>
using namespace std;

typedef void (*PF)();
void func()
{
  cout << "func" << endl;
}

void caller( PF pf)
{
  pf();
}

int main()
{
  PF p = func;
  caller(p);

  system("pause");

  return 0;
}

回调函数。高层调用了底层,底层反过来回调了顶层。lib用的是指针。回调函数是最终被调用的那个。


https://www.zhihu.com/question/19801131


来源2
链接:http://www.zhihu.com/question/19801131/answer/13005983
来源:知乎

你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回调函数就像一个传令兵,单片机执行某个操作时,需要通知外部程序进行相应的处理,这个时候就会通过回调函数来实现通知。 举个例子,比如单片机接收到了一个数据包,需要对这个数据包进行解析,然后根据解析结果执行相应的操作。这个时候可以定义一个回调函数,当单片机接收到数据包并解析完毕后,就会调用这个回调函数,让外部程序进行相应的处理。 下面是一个简单的例子,假设单片机接收到了一个数据包,需要解析出其中的数据和校验位,然后将数据传递给外部程序进行处理: ```c // 定义回调函数类型 typedef void (*callback_t)(uint8_t data); // 定义回调函数 void process_data(uint8_t data) { // 处理数据 ... } // 定义解析函数 void parse_packet(callback_t callback) { uint8_t data = receive_data(); uint8_t checksum = receive_checksum(); if (calculate_checksum(data) == checksum) { // 数据合法,调用回调函数 callback(data); } else { // 数据校验错误 ... } } // 在主函数中使用回调函数 int main() { while (true) { parse_packet(process_data); } } ``` 在上面的例子中,定义了一个回调函数类型`callback_t`,然后定义了一个回调函数`process_data`,用来处理数据。在解析函数`parse_packet`中,如果数据校验正确,就会调用传递进来的回调函数`callback`,将解析出来的数据传递给外部程序进行处理。在主函数中,每次循环调用`parse_packet`函数,并传递回调函数`process_data`,使得单片机能够不断接收数据并进行处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值