回调函数的简单使用0717

什么是回调函数

函数名可以用来作为参数的函数称为回调函数。

回调函数作用

  • 可以子啊恰当时候发送通知指令
  • 使代码更加的灵活
  • 可以提高代码的效率

C语言函数指针如何定义

 int (*pfunc)(int, int);  //声明函数的函数指针

上面是下面函数的函数指针,两者的函数返回值指类型相同,函数的形参类型和数目相同,函数名的部分是有小括号括起来,加上*号。最后写上函数指针名字,函数指针名字最为标识符,你愿意写什么样的都可以,就相当于一个变量,自己命名就好

int Add(int a, int b) { return a + b; }

函数指针的应用场景

第一种情况:

首先定义一个函数

int Add(int a, int b) { return a + b; }

其次,编写一个函数,里面声明一个函数指针,使用函数指针调用函数

void TestHDFunOne() {
    int a = 1;
    int b = 9;

    int sum = Add(a, b);
    printf("sum = %d\n", sum);

    int (*pfunc)(int, int);  //声明函数的函数指针
    pfunc = Add;  //对函数指针赋值,函数指针 = 函数名;
    
    int sum1 = pfunc(a, b);  //函数指针名调用函数,C++
    printf("sum1 = %d\n", sum1);

    int sum2 = (*pfunc)(a, b);  //函数指针名调用函数,C
    printf("sum2 = %d\n", sum2);
}

最后,在main 函数调用函数TestHDFunOne()

int main() {
    printf("start\r\n");
    TestHDFunOne();
    return 0;
}

结果:
在这里插入图片描述

第二种情况:无返回值回调函数

首先
定义两个没有返回值,没有形参的函数

void ChiZaoFan() { printf("吃早饭\n"); }

void ChiWanFan() { printf("吃晚饭\n"); }

其次,定义回调函数
回调函数吴返回值,形参是上面定义的无返回值、无形参的函数的函数指针

void TestHDFunTow(void (*fp)()) {
    printf("开始\n");

    (*fp)();//函数的具体调用语句

    printf("结束\n");
}

最后,在主函数调用回调函数

int main() {
    printf("start\r\n");
    TestHDFunTow(ChiZaoFan);
    TestHDFunTow(ChiWanFan);
    return 0;
}

结果:
在这里插入图片描述

第三种情况:回调函数调用有形参的函数

首先:定义两个有形参的函数

void ChiZaoFanFood(int food) { printf("吃早饭:%d\n", food); }

void ChiWanFanFood(int food) { printf("吃晚饭:%d\n", food); }

其次, 定义回调函数,这使用的是在回调函数的内部传递实参

void TestHDFunThree(void (*fp)(int)) {
    printf("开始\n");
    int c = 1;  //函数内部将实传入
    (*fp)(c);

    printf("结束\n");
}

主函数

int main() {
    printf("server start\r\n");
    NetClientInit(NetClintRecv);

    TestHDFunThree(ChiZaoFanFood);
    TestHDFunThree(ChiWanFanFood);

    return 0;
}

在这里插入图片描述

第四种情况:回调函数调用有形参的函数,有外部传入参数

首先,定义函数

void ChiZaoFanFood(int food) { printf("吃早饭:%d\n", food); }

void ChiWanFanFood(int food) { printf("吃晚饭:%d\n", food); }

其次,定义回调函数,注意,这里的回调函数的形参多了一个

void TestHDFunFour(void (*fp)(int), int c) {
    printf("开始\n");
    (*fp)(c);
    printf("结束\n");
}

主函数

int main() {
    printf("server start\r\n");

    TestHDFunFour(ChiZaoFanFood, 2);
    TestHDFunFour(ChiWanFanFood, 3);

    return 0;
}

结果:
在这里插入图片描述

从外传入实参的回调函数就比从里面传入的更加可以灵活使用

参考资料:
1、函数指针和回调函数
2、回调函数是个啥?

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

li星野

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值