回调函数的概念和用法

项目中,回调函数好像是一个必须使用的东东,之前有点晕,现在逐渐明白了,有必要梳理一下。

一般应用的场景是这样的,在某个网络端口或通信串口时,将一个函数FunA作为参数传递给那个网络模块和通信模块(DLL库)的打开函数。在某个条件下,比如收到来自网络的数据时,FunA就会响应。这个FunA就是回调函数。(待续)


什么是回调函数?

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针做为参数传递给另一个函数,当这个指针被用来调用其指向的函数时,我们就说这是回调函数。

回调函数的使用机制是怎样的?

1)  定义一个回调函数;

2)  提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;

3)  当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。

 

所以正确的使用回调函数需要理解函数指针。

什么是函数指针?

函数指针指向的是函数而非对象,和其他指针一样,函数指针指向某种特定类型。函数的类型由它的返回类型和形参类型共同决定,与函数名无关。

如:

 

void Invoke(char* s)
{
    printf(s);
}

 

void Invoke(char* s);

 

int main()
{
    void (*fp)(char* s);    //声明一个函数指针(fp)        
    fp=Invoke;              //将Invoke函数的入口地址赋值给fp
    fp("Hello World!\n");   //函数指针fp实现函数调用
    return 0;
}

  实际中,为了方便,通常用宏定义的方式来声明函数指针,实现程序如下:

 

typedef void (*FP)(char* s);
void Invoke(char* s);

int main(int argc,char* argv[])
{
    FP fp;      //通常是用宏FP来声明一个函数指针fp
    fp=Invoke;
    fp("Hello World!\n");
    return 0;
}

void Invoke(char* s)
{
    printf(s);
}

 

理解了函数指针,在实际开发中,遵循回调函数的使用机制就可以了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值