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

食品科技学校网站模板花溪村镇建设银行网站

食品科技学校网站模板,花溪村镇建设银行网站,珠海市品牌网站建设公司,越南做网站服务器#x1f3ac; 鸽芷咕#xff1a;个人主页 #x1f525; 个人专栏:《C语言初阶篇》 《C语言进阶篇》 ⛺️生活的理想#xff0c;就是为了理想的生活! 文章目录 #x1f4cb; 前言#x1f4ac; 函数指针数组#x1f4ad; 函数指针数组的定义#x1f4ad; 函数指针数组的… 鸽芷咕个人主页 个人专栏:《C语言初阶篇》 《C语言进阶篇》 ⛺️生活的理想就是为了理想的生活! 文章目录 前言 函数指针数组 函数指针数组的定义 函数指针数组的应用 —— 转移表 代码改进 指向函数指针数组的指针 回调函数 利用回调函数进行代码改进 全篇总结 前言 hello 各位宝子们大家好啊上节课我们学习了函数指针而函数指针有一个非常大的用途就是实现回调函数   ⛳️在了解回调函数之前我们还需要学习一下函数指针数组的概念   本期文章收录在《C语言进阶篇》大家有兴趣可以看看呐   ⛺️ 欢迎铁汁们 ✔️ 点赞 收藏 ⭐留言 注VS2022 等C语言学习工具都在《学习工具专栏》, 还有各种实用调试技巧有兴趣可以去看看 函数指针数组 ⛳️既然我们有指针数组的概念那么函数本身也是一个地址啊函数指针数组 和 指针数组只不过多了函数俩字 那么函数指针数组该如何定义呢 函数指针数组的定义 ⛳️假设我们要写一个计算器加减乘除4个部分的函数但是函数参数都是一样的。想把他放到一个函数指针数组里面该怎么办呢 函数指针我们知道怎么定义但是加了数组俩字该怎么定义呢? 代码演示 #include stdio.hint Sum(int x, int y) {return x y; } int Sub(int x, int y) {return x - y; } int Mul(int x, int y) {return x * y; } int Div(int x, int y) {return x / y; }int main() {int (*pf1)(int, int) Sum;int (*pf2)(int, int) Sub;int (*pf3)(int, int) Mul;int (*pf4)(int, int) Div;//函数指针数组int (*pfArr[4])(int, int) {Sum,Sub,Mul,Div};return 0; }大家看函数指针数组就是这样定义的由于【】号的结合性比 * 号高所以 pfArr就先和【】号结合所以pfArr[ 4 ] 表示这个指针是个数组。 * 号则代表pfArr[ 4 ] 是个指针int(*)(int , int ) 代表了他是个函数指针类型的所以 nt (*pfArr[4])(int, int) 是函数指针数组类型的 函数指针数组的应用 —— 转移表 前面写的计算器如果按照我们以前思路写的代码会非常冗余那么我们学了函数指针数组有没有可能吧代码优化下嘛? 这时就要用到函数指针数组的应用 —— 转移表了我们来看一下 未改变前 #include stdio.hint Sum(int x, int y) {return x y; } int Sub(int x, int y) {return x - y; } int Mul(int x, int y) {return x * y; } int Div(int x, int y) {return x / y; }void menu() {printf(***********************\n);printf(***** 1:add 2:sub ***** \n);printf(***** 3:mul 4:div *****\n);printf(***** 0.exit *****\n);printf(***********************\n); } int main() {int input 0;int x 0;int y 0;int ret 0;do{menu();printf(请输入-);scanf(%d, input);switch (input){case 1:printf(请输入俩个操作数);scanf(%d %d, x, y);ret Sum(x, y);printf(%d\n, ret);break;case 2:printf(请输入俩个操作数);scanf(%d %d, x, y);ret Sub(x, y);printf(%d\n, ret);break;case 3:printf(请输入俩个操作数);scanf(%d %d, x, y);ret Mul(x, y);printf(%d\n, ret);break;case 4:printf(请输入俩个操作数);scanf(%d %d, x, y);ret Div(x, y);printf(%d\n, ret);break;case 0:printf(退出计算器\n);break;default:printf(选择错误请重新输入!\n);break;}} while (input);return 0; }代码改进 这里我们就带代码进行了改进使得main() 函数里面代码量大大减少。 这里由于我们选择时的数字要和数组下标一样所以我们填充一个空指针 NULL 让每个数组下标和我们的操作数对应 #include stdio.h int Sum(int x, int y) {return x y; } int Sub(int x, int y) {return x - y; } int Mul(int x, int y) {return x * y; } int Div(int x, int y) {return x / y; }void menu() {printf(***********************\n);printf(***** 1:add 2:sub ***** \n);printf(***** 3:mul 4:div *****\n);printf(***** 0.exit *****\n);printf(***********************\n); } int main() {int input 0;int x 0;int y 0;int ret 0;do{menu();printf(请输入-);scanf(%d, input);//函数指针数组 —— 转移表int(*pfArr[5])(int, int) {NULL ,Sum,Sub,Mul,Div};if (input 1 input 4){printf(请输入操作数);scanf(%d %d, x, y);ret pfArr[input](x, y);printf(%d\n, ret);}else if (input 0){return 0;}else{printf(选择错误请重新输入;\n);}} while (input);return 0; }指向函数指针数组的指针 这里我们又进行了一遍套娃指针数组既然我们能接收那么。有没有指向函数指针数组的指针呢?答案是有的。 数组指针类型 int (*p)[ 5 ] 函数指针类型 int (*pf)(int, int) 函数指针数组类型 int (*pf [ 5 ])(int, int) 指向函数指针数组的指针 int (*(*pf)[ 5 ])(int, int) 这里我们可以怎么样理解呢首先在指向函数指针数组的指针不要硬写在我们函数指针数组的类型上进行改变 函数指针数组类型 int (*pf [ 5 ])(int, int) 我们首选需要一个指向函数指针数组的指针那么pf 就不能和左边的 * 结合 因为 int (* [ 5 ])(int, int) 代表了函数指针数组类型而我们想要接收他就需要一个指针 *pf那么把它括起来就是指向函数指针数组的指针了int (*(*pf)[ 5 ])(int, int) 代码演示 回调函数 ⛳️回调函数就是一个通过函数指针调用的函数。如果你把函数的指针地址作为参数传递给另一个函数当这个指针被用来调用其所指向的函数时我们就说这是回调函数。回调函数不是由该函数的实现方直接调用而是在特定的事件或条件发生时由另外的一方调用的用于对该事件或条件进行响应。 怎么应用呢函数指针的应用其实就是回调函数我们前面改进计算器的的时候用函数指针数组进行改进那么我们下面就对计算器用回调函数的方式进行改进 回调函数我的理解就是通过函数指针的方式接收函数的地址从而调用它。让一个函数可以调用多个同类型的函数的功能在特定的情况给我传输函数地址从而使用它。 上面计算器的实现用switch 语句实现的时候每一个case语句都是相同的除了函数的实现方法不同。这样就导致代码过于冗余 而这我们就可以用一个回调函数进行改进让这些代码都在一个函数里面。每次使用那个函数直接传送给我们的地址就行了 代码演示 这样铁汁们看是不是就避免的代码冗余的问题我们只需要把函数地址传过来就可以了输入什么选择就传什么函数从而去调用他 void calc(int (*pf)(int x, int y)) {int x 0;int y 0;printf(请输入操作数;);scanf(%d %d, x, y);int ret pf(x, y);printf(%d\n, ret); }利用回调函数进行代码改进 代码演示 #include stdio.h int Sum(int x, int y) {return x y; } int Sub(int x, int y) {return x - y; } int Mul(int x, int y) {return x * y; } int Div(int x, int y) {return x / y; }void menu() {printf(***********************\n);printf(***** 1:add 2:sub ***** \n);printf(***** 3:mul 4:div *****\n);printf(***** 0.exit *****\n);printf(***********************\n); } void calc(int (*pf)(int x, int y)) {int x 0;int y 0;printf(请输入操作数;);scanf(%d %d, x, y);int ret pf(x, y);printf(%d\n, ret); } int main() {int input 0;do{menu();printf(请输入-);scanf(%d, input);switch (input){case 1:calc(Sum);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; }全篇总结 ✅ 归纳 好了以上就是回调函数的使用和讲解以及函数指针数组的概念大家好好理解一下吧   函数指针数组   函数指针数组的使用   回调函数的概念   回调函数的应用 ☁️ 好了今天的知识全是干货不知道各位铁汁们学到了没有呢快拿去用吧 看到这里了还不给博主扣个 ⛳️ 点赞☀️收藏 ⭐️ 关注 ❤️ 拜托拜托这个真的很重要 你们的点赞就是博主更新最大的动力 有问题可以评论或者私信呢秒回哦。
http://www.w-s-a.com/news/895545/

相关文章:

  • 图片渐隐 网站头部flash地方志网站建设自查报告
  • 深圳做商城网站视觉品牌网站建设
  • 永康电子商务网站建设弹幕网站怎么做
  • 百川网站企业做网站要注意哪些
  • 球迷类的网站如何做网站建设需要哪些素材
  • 请问有重庆有做网站吗电子政务系统网站建设的基本过程
  • 建设银行管方网站官网最新版cmsv6
  • 网站开发工程师需要会写什么深圳网站(建设信科网络)
  • 台州网站搭建网站建设需求计划
  • 网站app免费下载软件大全大连百度推广哪家好
  • 网站建设的面试要求iis做的网站手机怎么访问
  • 定州市住房保障和城乡建设局网站上海网站建设排行
  • 网站发帖百度收录网站改版后不收录
  • 昆明建设局网站号码网站开发 浏览器兼容性
  • 湖北专业网站建设大全室内设计联盟app下载
  • 网站建设的意义和作用江苏城市建设档案馆网站
  • 华为云速建站贴心的广州网站建设
  • 网页网站开发公司天津seo推广
  • 网站线框图用什么做共享门店新增礼品卡兑换模式
  • 互联网建站是什么seo服务公司上海
  • 象山县城乡建设局网站做网站客户要求分期
  • 什么是网络营销型网站手机网站 图标
  • 全国新农村建设网站外包和劳务派遣哪个好
  • 网站权限控制什么软件做网站描述
  • 建网络商城网站wordpress关于
  • 专业网站建设分类标准重庆网站开发哪家专业
  • 织梦的网站关键词如何自己搭建微信小程序
  • 怎么做基金公司网站韩都衣舍网站建设ppt
  • 外贸网站模板aspnet网站开发 视频
  • 上海植物租赁做网站南浔网站建设