回调函数的简单使用0717

发布于:2023-01-13 ⋅ 阅读:(421) ⋅ 点赞:(0)

什么是回调函数

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

回调函数作用

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

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、回调函数是个啥?

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到