【C语言】深入理解指针(4)回调函数


 

目录

回调函数 

回调函数的应用

i,简化代码逻辑

ii,实现上下机之间的通讯


回调函数 

 

        回调函数就是⼀个通过函数指针调用的函数。

        如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被用来调用其所指向的函数时,被调用的函数就是回调函数。
        回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的⼀方调用的,用于对该事件或条件进行响应。

 

回调函数的应用

i,简化代码逻辑

//使⽤回调函数改造前
#include <stdio.h>
int add(int a, int b)
{
    return a + b;
}
int sub(int a, int b)
{
    return a - b;
}
int mul(int a, int b)
{
    return a * b;
}
int div(int a, int b)
{
    return a / b;
}
int main()
{
    int x, y;
    int input = 1;
    int ret = 0;
    do
    {
        printf("******************\n");
        printf(" 1:add  2:sub ****\n");
        printf(" 3:mul  4:div ****\n");
        printf("******************\n");
       
        scanf("%d", &input);

        switch (input)
        {
        case 1:
            printf("输⼊操作数:");

            scanf("%d %d", &x, &y);
            ret = add(x, y);
            printf("ret = %d\n", r);
        break;
        case 2:
            printf("输⼊操作数:");

            scanf("%d %d", &x, &y);
            ret = sub(x, y);
            printf("ret = %d\n", r);
        break;
        case 3:
            printf("输⼊操作数:");

            scanf("%d %d", &x, &y);
            ret = mul(x, y);
            printf("ret = %d\n", r);
        break;
        case 4:
            printf("输⼊操作数:");

            scanf("%d %d", &x, &y);
            ret = div(x, y);
            printf("ret = %d\n", r);
        break;
        case 0:

            printf("退出程序\n");
        break;
        default:

        printf("选择错误\n");
        break;
        }
    } while (input);

    return 0;
}

        经过简化,可以优化代码逻辑,更加清晰易懂。

//使⽤回到函数改造后
#include <stdio.h>
int add(int a, int b)
{
    return a + b;
}
int sub(int a, int b)
{
    return a - b;
}
int mul(int a, int b)
{
    return a * b;
}
    int div(int a, int b)
{
    return a / b;
}
//回调函数,根据接收的不同函数的地址,调用不同的函数
void calc(int(*pf)(int, int))
{
    int ret = 0;
    int x, y;
    printf("输⼊操作数:");
    scanf("%d %d", &x, &y);
    ret = pf(x, y);
    printf("ret = %d\n", ret);
}
int main()
{
    int input = 1;
    do
    {
        printf("*****************\n");
        printf(" 1:add 2:sub ****\n");
        printf(" 3:mul 4:div ****\n");
        printf("*****************\n");
        printf("请选择:");
        scanf("%d", &input);
        switch (input)
        {
            case 1:
                calc(add);
            break;
            case 2:
                calc(sub);
            break;
            case 3:
                calc(mul);
            break;
            case 4:
                calc(div);
            break;
            case 0:
                printf("退出程序\n");
            break;
            default:
                printf("选择错误\n");
            break;
        }
    } while (input);
    return 0;
}

 

ii,实现上下机之间的通讯


        我们可以约定不同的ID,当接收方接到不同的ID信息时,根据ID信息调用不同的函数,这样就实现了通过回调函数来实现上下机之间的通信。

        其实在 i 中,我们就通过打印信息约定了:

操作数 1 2 3 4
操作 加法 减法 乘法 除法

        在提前约定好的前提下,上位机发送一串数据信息,下位机通过解析其中的ID信息,得到ID,ID不同,调用的函数不同,做出的反应也不同。

 


本文仅仅是提供2个例子,并不能让你详细了解回调函数的所有功能。


 

~完

未经作者同意进制转载

相关推荐

  1. C语言指针函数

    2024-02-01 09:44:02       8 阅读
  2. C语言函数指针函数

    2024-02-01 09:44:02       20 阅读
  3. C语言深入理解函数指针

    2024-02-01 09:44:02       38 阅读
  4. C++ 函数指针函数

    2024-02-01 09:44:02       23 阅读
  5. C 函数指针函数

    2024-02-01 09:44:02       13 阅读
  6. C语言中的函数指针指针函数函数

    2024-02-01 09:44:02       32 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-01 09:44:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-01 09:44:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-01 09:44:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-01 09:44:02       18 阅读

热门阅读

  1. 探索Python与C/C++混合编程的艺术

    2024-02-01 09:44:02       31 阅读
  2. CSS的transition:

    2024-02-01 09:44:02       30 阅读
  3. SQL注入

    SQL注入

    2024-02-01 09:44:02      33 阅读
  4. app的启动

    2024-02-01 09:44:02       28 阅读
  5. leetcode—划分字母区间—贪心算法

    2024-02-01 09:44:02       32 阅读
  6. 2670--------找出不同元素数目差数组

    2024-02-01 09:44:02       32 阅读
  7. 华为数通方向HCIP-DataCom H12-831题库(填空题)

    2024-02-01 09:44:02       35 阅读
  8. 字母循环转换(‘z‘转换为‘a‘)

    2024-02-01 09:44:02       79 阅读
  9. 速盾:服务器高防CDN能防御哪些网络攻击

    2024-02-01 09:44:02       35 阅读
  10. STM32F407移植OpenHarmony笔记5

    2024-02-01 09:44:02       36 阅读