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

    文章

    11292

    浏览量

    209323
  • 回调函数
    +关注

    关注

    0

    文章

    87

    浏览量

    11554
  • 函数指针
    +关注

    关注

    2

    文章

    56

    浏览量

    3778
收藏 人收藏

    评论

    相关推荐

    一文详解C语言函数指针函数

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

    C语言里面的函数指针函数

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

    一文详解函数指针函数

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

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

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

    C语言函数学习

    指针的应用是C语言编程的精髓所在,而回函数就是C语言里面对函数指针的高级应用。简而言之,
    发表于 05-27 09:44 7204次阅读

    基于Qt组件的俄罗斯方块设计

    函数指针函数响应触发的每个动作。而在QT中信号和槽取代了函数
    发表于 11-15 15:16 9次下载

    LabWindows/CVI 程序 函数设计

    函数是系统框架设计中非常重要的一种手段,所谓函数(callback )是指一个通过
    发表于 05-03 16:54 1.1w次阅读
    LabWindows/CVI 程序 <b class='flag-5'>回</b><b class='flag-5'>调</b><b class='flag-5'>函数</b>设计

    C语言函数函数

    ,如果过后再执行,则称之为异步函数就是一个通过函数
    的头像 发表于 09-11 09:57 4127次阅读

    详解函数的概念及使用步骤

    函数就是一个被作为参数传递的函数。在C语言中,函数
    的头像 发表于 05-26 15:20 4013次阅读

    函数指针函数的使用方法

    了解开发语言的朋友应该都会对函数有所了解,在很多的程序开发语言中都能看到的身影。很多场景下,当某个条件成立以后我们希望代码执行某些指
    的头像 发表于 04-10 15:08 1094次阅读

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

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

    C语言技巧之函数

    在讲函数之前,我们需要了解函数指针
    的头像 发表于 04-18 11:50 777次阅读

    C++函数指针函数详解

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

    函数指针函数的应用实例

    通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数函数指针
    的头像 发表于 03-07 11:13 399次阅读
    <b class='flag-5'>函数</b><b class='flag-5'>指针</b>与<b class='flag-5'>回</b><b class='flag-5'>调</b><b class='flag-5'>函数</b>的应用实例

    函数(callback)是什么?函数的实现方法

    函数是一种特殊的函数,它作为参数传递给另一个函数,并在被调用函数执行完毕后被调用。
    发表于 03-12 11:46 2903次阅读