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

C语言指针进阶二:(函数指针数组,转移表)

函数指针数组

函数指针数组就是存放函数指针的一个数组,数组里都是函数指针,那么该怎么定义:
 

int (*parr[10])();

因为 [] 的优先级高于 * ,所以parr先与 [] 结合说明是一个数组,元素类型是 int(*)() 的函数指针。

函数指针数组的用途:转移表

转移表的基础列子:实现计算器

#include<stdio.h>
//函数指针数组创建的简易计算器,又称转移表void meau()
{printf("******************\n");printf("*** 1:add 2:sub***\n");printf("*** 3:mul 4:div***\n");printf("*** 0.exlt     ***\n");printf("******************\n");
}int add(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 input = 0;int (*parr[])(int, int) = { 0, add, sub, mul, div };//存放函数指针的数组int x = 0, y = 0, ret = 0;do{meau();printf("请选择:");scanf("%d", &input);if (input == 0){printf("退出计算器\n");}else if(input <= 4 && input >= 1){printf("请输入两个数:");scanf("%d %d", &x, &y);ret = parr[input](x, y);printf("ret = %d\n", ret);}else{printf("输入错误,重新输入\n");}} while (input);
}

源代码如上,因为 加减乘除 四个函数的类型相同,所以可以把他们存放到一个数组里,通过数组下标访问函数来调用函数,这样会比普通的计算器代码简便许多,减少了许多代码。

指向函数指针数组的指针

这不是必须学会的,但是理解了可以提升自己。

指向函数指针数组的指针该怎么定义?

int(*parr[5])(int,int);//函数指针数组int(*(*pfun)[5])(int,int);//指向函数指针数组的指针

 剩下的是函数指针数组,pfun与*结合说明是指针。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ElasticSearch学习笔记(三)RestClient操作文档、DSL查询文档、搜索结果排序
  • redis主从+高可用切换+负载均衡
  • FPGA开发:初识FPGA
  • 建行的一些记录
  • 更懂消费者 火山引擎数据飞轮助力乳企数智升级
  • AI机械键盘,罗技推出首款AI机械键盘K98M
  • 云计算之数据库
  • K8S 发布应用
  • 《零散知识点 · Kafka 知识拓展》
  • 前端项目开发之安装prettier和使用
  • 如何在平凡的生活中看到商机?
  • CSS - 搜索框小动效
  • ArcGIS Pro SDK (十二)布局 8 布局元素选择和更改
  • 秒懂:进程(概念初晓)
  • 安防视频综合管理系统EasyCVR视频汇聚平台集群部署出现状态不同步的情况是什么原因?
  • __proto__ 和 prototype的关系
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • centos安装java运行环境jdk+tomcat
  • Linux中的硬链接与软链接
  • Median of Two Sorted Arrays
  • spring boot 整合mybatis 无法输出sql的问题
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 给第三方使用接口的 URL 签名实现
  • 聊聊redis的数据结构的应用
  • 深入浏览器事件循环的本质
  • 移动端唤起键盘时取消position:fixed定位
  • 怎样选择前端框架
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • python最赚钱的4个方向,你最心动的是哪个?
  • 阿里云服务器如何修改远程端口?
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • # 职场生活之道:善于团结
  • (16)Reactor的测试——响应式Spring的道法术器
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束
  • (ZT)薛涌:谈贫说富
  • (二)测试工具
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (十)T检验-第一部分
  • (一)模式识别——基于SVM的道路分割实验(附资源)
  • (转)c++ std::pair 与 std::make
  • (转)iOS字体
  • (轉貼) UML中文FAQ (OO) (UML)
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .axf 转化 .bin文件 的方法
  • .NET CLR Hosting 简介
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .Net Core与存储过程(一)
  • .NET程序员迈向卓越的必由之路
  • .net反混淆脱壳工具de4dot的使用
  • .NET下ASPX编程的几个小问题
  • .NET下的多线程编程—1-线程机制概述