C语言 钩子函数

函数的指针可以指向不同的函数,从而完成不同的功能。话说, 函数指针是怎么定义呢? 函数指针和普通的指针没什么区别,只是函数指针是指向函数的指针。函数指针的定义方式起始和函数声明方式类似:

int (* g_pFun) (int x, int y); 这里定义了一个返回值为int类型,有两个int类型传入参数的函数

假如我在写代码的时候,写了一个这样的函数:

int Max(int x, int y)

{

}

g_pFun可以指向Max   

g_pFun = Max

这样我们就可以使用g_pFun 来调用Max函数了, 比如,g_pFun(10, 12)和Max(10, 12)是一样的效果。


实例代码:

#include "stdio.h"
 
void fun1(void)
{
    printf("i am fun1\r\n");
}
 
void fun2(void)
{
    printf("i am fun2\r\n");
}
 
int main(int argc, char const *argv[])
{
    void (* fun)(void); //定义一个函数指针
 
    // 让fun指向fun1
    fun = fun1;
    // 执行fun
    fun();
 
    // 让fun指向fun2
    fun = fun2;
    // 执行fun
    fun();
 
    return 0;
}

运行结果:

注意:为了便于使用,函数指针往往被声明为全局变量,这也是刚才把函数指针的名字命名为g_pFun的原因。

下面我们来进行一下实战演习,比如,平台部分要执行某一个操作,但是具体的操作还不确定,我们完成这样的代码:

#include "stdio.h"
 
int (* g_pFun) (int x, int y);  /*函数指针*/
 
int Plat(void)
{
    int r;
    int a = 10;
    int b = 15;
 
    r = g_pFun(a, b);
 
    printf("%d\n", r);
 
    return 0;
}
 
//另外,平台部分再提供一个注册函数:
int RegFun(int (*pFun)(int x, int y))
{
    g_pFun = pFun;
 
    return 0;
}
 
//应用模块完成具体的函数的功能:
int Max(int x, int y)
{
    if(x > y)
    {
        return x;
    }
    else
    {
        return y;
    }
}
 
int Min(int x, int y)
{
    if (x < y)
        return x;
    else
        return y;
}
 
int main(int argc, char const *argv[])
{
    /* code */
 
    RegFun(Min);
    Plat();
 
    RegFun(Max);
    Plat();
 
    return 0;
}

在嵌入式系统中,底层不知道应用层需要完成什么功能, 往往会提供像这样子的函数回调方式供应用层使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值