当前位置: 首页 > news >正文

【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 中,我们就通过打印信息约定了:

操作数1234
操作加法减法乘法除法

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

 


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


 

~完

未经作者同意进制转载

相关文章:

  • Apache Doris 2.0.4 版本正式发布
  • TensorFlow 的基本概念和使用场景
  • 【Java】SSM入门开发流程总结
  • C语言KR圣经笔记 6.1结构体基础 6.2结构体和函数
  • STM32 1-5
  • 物联网操作系统-Alios Things
  • 【LeetCode每日一题】56. 合并区间插入区间
  • PiflowX组件-FileWrite
  • Stable Diffusion插件Recolor实现黑白照片上色
  • BGP同步规则
  • 【c语言】详解操作符(上)
  • WSL—子系统安装及其相关配置和[诸多报错问题]-修改默认安装位置
  • 头歌C语言指针进阶
  • 爬虫基础-前端基础
  • 基于ssm和微信小程序的健身房私教预约管理系统
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • bearychat的java client
  • js中forEach回调同异步问题
  • Lsb图片隐写
  • React的组件模式
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 计算机在识别图像时“看到”了什么?
  • 简单易用的leetcode开发测试工具(npm)
  • 类orAPI - 收藏集 - 掘金
  • 目录与文件属性:编写ls
  • 设计模式(12)迭代器模式(讲解+应用)
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​ubuntu下安装kvm虚拟机
  • # include “ “ 和 # include < >两者的区别
  • $.ajax,axios,fetch三种ajax请求的区别
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (正则)提取页面里的img标签
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)四层和七层负载均衡的区别
  • . Flume面试题
  • .net core 依赖注入的基本用发
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .net流程开发平台的一些难点(1)
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .NET应用架构设计:原则、模式与实践 目录预览
  • .net中的Queue和Stack
  • .net中我喜欢的两种验证码
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [ACM] hdu 1201 18岁生日
  • [codeforces]Checkpoints
  • [Docker]十.Docker Swarm讲解
  • [ESP32 IDF]web server
  • [java]删除数组中的某一个元素
  • [Labtools 27-1429] XML parser encountered a problem in file
  • [Linux] - 定时任务crontab