关于回调函数和函数调用

STM32F767的HAL文档的时候发现程序回调函数对于理解整个程序还是有很大的帮助,就想写下了,顺便就加深对回调函数的理解。


回调函数介绍:

回调函数:实质就是传址调用,系统可以像QT中的信号和槽一样设置如何触发或是直接用一个函数指针去调用。可以用户调用也可以系统调用。

代码段

自己在编辑器打出的一个例子:

#include <iostream>
using namespace std;

char (*pFun)(int);
//定义一个函数指针,名字是pFun,返回值类型char,有一个形参
//函数的名字是一个无名函数(类似无名对象)
//该指针指向函数的起始地址 
//可以理解为:char *pFun=char (int ) 

/*
typedef char(*TYPE)(int);
//可以理解为:typedef TYPE char (*)(int) 
TYPE pFun;
//这是第二种的方式,定义的是类型而不是一个对象。
*/

//glFun是函数的起始地址,类似数组 
char glFun(int a)
{
    cout<<a<<endl;
    //return a;
} 
int main()
{
    pFun=glFun;
    cout<<pFun<<endl;
    cout<<*pFun<<endl;
    (*pFun)(2);
    //*pFun代表glFun函数,传入形参2 
    return 0;   
}

函数调用

还有一种回调函数的调用方式就是作为形参调用:

    //假如这里有一个函数
    //函数指针的形参只是说明这个函数还有参数,还要分配地址去分辨使用函数指针调用函数的时候传参。
    int weak(int (*pfun)(int),int a)
    {
        (*pfun)(a);
    }

    //这里是函数调用
    int test(int )
    {......;}
    int main()
    {       
        weak(test,a);
        //weak把test的地址传给定义函数的时候相当于:int *pfun=int (*)(int);pfun=test;
    }

程序段中信号的传递也是同样的道理

void signal(int signum)
{
     printf("时间到了,起床!\n");
}
int main()
{
    signal(SIGALRM, signal);
    //SIGALRM是系统宏定义好的信号
}

目录:

文章个人理解,要是有什么理解不对的地方有时间可以联系我修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值