0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

函数指针与回调函数

嵌入式应用开发 来源:嵌入式应用开发 作者:嵌入式应用开发 2022-09-09 08:55 次阅读

函数指针:

linux驱动面向对象编程思想中用的最多,利用函数指针来实现封装,下面以一个简单的例子说明:

#include 

typedef struct TFT_DISPLAY
{
    int   pix_width;
    int   pix_height;
    int   color_width;
    void (*init)(void);
    void (*fill_screen)(int color);
    void (*tft_test)(void);

}tft_display;

static void init(void)
{
    printf("the display is initialed\n");
}

static void fill_screen(int color)
{
    printf("the display screen set 0x%x\n",color);

}

tft_display mydisplay=
{
    .pix_width=320,
    .pix_height=240,
    .color_width=24,
    .init=init,
    .fill_screen=fill_screen,
};

int main(int argc, char **argv)
{

    mydisplay.init();
    mydisplay.fill_screen(0xfff);
    return 0;
}

上面的例子将一个tft_display封装成一个对象,上面的结构体成员中最后一个没有初始化,这在Linux中用的非常多,最常见的是file_operations结构体,该结构体一般来说只需要初始化常见的函数,不需要全部初始化。上面代码中采用的结构体初始化方式也是在Linux中最常用的一种方式,这种方式的好处在于无需按照结构体的顺序一对一。

回调函数:

有时候会遇到这样一种情况,当上层人员将一个功能交给下层程序员完成时,上层程序员和下层程序员同步工作,这个时候该功能函数并未完成,这个时候上层程序员可以定义一个API来交给下层程序员,而上层程序员只要关心该API就可以了而无需关心具体实现,具体实现交给下层程序员完成即可(这里的上层和下层程序员不指等级关系,而是项目的分工关系)。这种情况下就会用到回调函数(Callback Function),现在假设程序员A需要一个FFT算法,这个时候程序员A将FFT算法交给程序员B来完成,现在来让实现这个过程:

int  InputData[100]={0};
int OutputData[100]={0};

void FFT_Function(int *inputData,int *outputData,int num)
{
    while(num--)
    {

    }
}

void TaskA_CallBack(void (*fft)(int*,int*,int))
{

    (*fft)(InputData,OutputData,100);
}

int main(int argc, char **argv)
{

    TaskA_CallBack(FFT_Function);
    return 0;
}

上面的代码中TaskA_CallBack是回调函数,该函数的形参为一个函数指针,而FFT_Function是一个被调用函数。可以看到回调函数中申明的函数指针必须和被调用函数的类型完全相同。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10990

    浏览量

    206738
  • 回调函数
    +关注

    关注

    0

    文章

    87

    浏览量

    11455
  • 函数指针
    +关注

    关注

    2

    文章

    53

    浏览量

    3737
收藏 人收藏

    评论

    相关推荐

    一文详解C语言函数指针与回调函数

    在讲回调函数之前,我们需要了解函数指针
    发表于 10-19 09:34 536次阅读

    C语言里面的函数指针和回调函数

    在讲回调函数之前,我们需要了解函数指针
    发表于 12-13 10:28 330次阅读

    一文详解函数指针与回调函数

    函数指针是指向函数指针变量。它允许我们将函数作为参数传递给其他函数或将
    发表于 08-22 10:36 191次阅读

    一线研发之声:嵌入式C编程经验 之 函数指针

    : 2012-01-12* key: 嵌入式 函数指针 函数* 本文首发: 环球资源-电子工程专辑-博客: 静心斋
    发表于 02-05 21:38

    [转]一线研发之声:嵌入式C编程经验 之 函数指针

    : 2012-01-12* key: 嵌入式 函数指针 函数* 本文首发: 环球资源-电子工程专辑-博客: 静心斋
    发表于 07-22 14:41

    函数小结

    调用对应的函数)的这个过程就是函数回调过程,被函数称为
    发表于 07-05 01:51

    函数指针指针函数函数总结分享!

    看蓝牙协议栈的时候遇到了函数,之前就没有用过,函数指针函数
    发表于 10-15 19:23

    c语言函数指针定义,指针函数函数指针的区别

     往往,我们一提到指针函数函数指针的时候,就有很多人弄不懂。下面就由小编详细为大家介绍C语言中函数指针
    发表于 11-16 15:18 3410次阅读

    C语言教程之函数指针变量与指针函数的区别(下篇)

    z=(*pfun)(x,y); //调用函数指针变量,实参x和y的值传递给形参a和b printf(“max=%dn”,z); //形参a和b的值发生交换存储在max函数存储区,因为pfun
    发表于 05-22 07:30 1799次阅读

    使用函数指针的方法实现状态机

    之前写过一篇状态机的实用文章,很多朋友说有几个地方有点难度不易理解,今天给大家换种简单写法,使用函数指针的方法实现状态机。 状态机简介 有限状态机FSM是有限个状态及在这些状态之间的转移和动作等行为
    的头像 发表于 10-19 09:36 2172次阅读
    使用<b class='flag-5'>函数</b><b class='flag-5'>指针</b>的方法实现状态机

    函数指针和回调函数的使用方法

    了解开发语言的朋友应该都会对回调函数有所了解,在很多的程序开发语言中都能看到回调的身影。很多场景下,当某个条件成立以后我们希望代码执行某些指定的部分,这个时候可以考虑使用回调函数的方式,这样做思路更加的清晰,也能使代码结构的逻辑更加清晰,结构更加好。
    的头像 发表于 04-10 15:08 792次阅读

    嵌入式函数回调注册机制的实现

    嵌入式函数回调注册机制是一种常用的解耦技术,它通过在应用程序中注册回调函数的方式来实现模块之间的通信,从而使系统更加灵活、可扩展和易于维护。函数回调注册机制可以通过函数
    的头像 发表于 04-13 15:52 944次阅读

    C语言进阶:函数指针的概念和使用方法

    函数指针是指向函数指针变量。 通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数
    发表于 05-02 06:17 5056次阅读

    C++函数指针和回调函数详解

    指针是一个变量,是用来指向内存地址。
    发表于 08-21 15:07 143次阅读
    C++<b class='flag-5'>函数</b><b class='flag-5'>指针</b>和回调<b class='flag-5'>函数</b>详解

    提高C代码可读性的编写技巧与策略

    指针是 C 语言的灵魂,是 C 比其他语言更灵活,更强大的地方。所以学习 C 语言必须很好的掌握指针函数指针,即指向函数在内存映射中的首地
    发表于 04-23 18:25 80次阅读