打印
[疑难问答]

回调函数 初识

[复制链接]
1085|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
macpherson|  楼主 | 2024-11-30 22:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C语言回调函数–初识回调函数
回调函数简介:
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

回调运行机制
定义一个回调函数;
提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;
当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。
回调意义
因为可以把调用者与被调用者分开,所以调用者不关心谁是被调用者。它只需知道存在一个具有特定原型和限制条件的被调用函数。简而言之,回调函数就是允许用户把需要调用的方法的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以灵活的使用不同的方法。
  回调函数是继承自C语言的。在C++中,应只在与C代码建立接口或与已有的回调接口打交道时,才使用回调函数。除了上述情况,在C++中应使用虚拟方法或仿函数(functor),而不是回调函数。



测试回调函数
一、首先使用typedef声明执行函数的指针类型,返回值类型、参数类型
格式:typedef int (*POINTER)() 即:返回值(指针名)(参数列表)
例:
typedef int (*CallBackFun)(char *p); //为回调函数命名,类型命名为CallBackFun,参数为char *p
二、编写回调函数(方法)原型,格式应符合上面声明的CallBackFun
格式:int Afun(char *p) 即:返回值 函数名(参数列表)
例:

int Call2(char *p,int(*ptr)())
{
        printf("==%s! \n\r",p);
        (*ptr)(p);
        return 0;
}
三、编写执行回调函数的函数
格式一:int call(CallBackFun pCallBack, char *p) 通过命名方式
格式二:int call2(char *p, int (*ptr)()) 通过回调函数指针
例:

int call(CallBackFun pCallBack,char *p)
{
    printf("call print %s! \n\r",p);
    pCallBack(p);
    return 0;
}


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

1651

帖子

1

粉丝