




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
今天在看 C prime plus 的时候无意间看到了函数指针 这是个我很少涉及的地方 打 算写一个小程序来熟悉一下 采用了下面一个开车的现实抽象来简单的理解一下函数指针 Drive 函数表示驾驶车辆 它会输出车辆在距离一定和燃油的情况下 使用不同的汽车 引擎时的最终行驶距离 暂且不考虑 Drive 函数现实意义 Drive 函数的原型 void Drive double distance int hasoil double engine int oil distance 车辆的目标距离 Hasoil 车辆拥有的燃油 double engine int oil 传递进来的引擎函数指针 当我们在调用 Drive 函数的时候 它会根据车辆的目标距离 拥有的燃油 和引擎函 数算出它能行驶的最远距离 我们不要去纠结这些数据的真实性 而是实现的原理 Drive 函数的定义 void Drive double distance int hasoil double engine int oil distance engine hasoil std cout Cant drive distance miles with hasoil L oil std endl 同时定义了 3 个汽车引擎 int 变量是向它们输入的燃油数量 用不同的计算公式表示 引擎执行效率 double gotoEngine int oil return oil 0 8 300 20 double linkEngine int oil return oil 7 25 300 oil 0 001 400 double metoEngine int oil return oil 4 20000 100 0 7 oil 下面是整个程序的实现 void Drive double distance int hasoil double engine int oil distance engine hasoil std cout Cant drive distance miles with hasoil L oil std endl double gotoEngine int oil return oil 0 8 300 20 double linkEngine int oil return oil 7 25 300 oil 0 001 400 double metoEngine int oil return oil 4 20000 100 0 7 oil int main void double dist 1000 00 int oil 30 double pengins 3 int gotoEngine linkEngine metoEngine std cout func pointer array std endl for size t i 0 i 3 i Drive dist oil pengins i std cout std endl std cout auto single func pointer std endl auto pgoto gotoEngine auto plink linkEngine auto pmeto metoEngine Drive dist oil pgoto Drive dist oil plink Drive dist oil pmeto std cout std endl std cout auto func pointer array std endl auto autoPengines pengins for size t i 0 i 3 i Drive dist oil autoPengines i auto pc double pd 2 3 int double pf 2 3 int double pe 2 2 3 int std cout Loop out begin std endl for size t i 0 i 2 i for size t j 0 j 2 j for size t k 0 k 3 k Drive dist oil pe i j k getchar return 0 做进一步的解释 采用 C 11 标准 double pengins 3 int gotoEngine linkEngine metoEngine 这句话定义了一个函数指针的数组 pengins 数组的大小为 3 并用 gotoEngine linkEngine metoEngine 三个函数初始化了这个数组 为什么会这样呢 假如我们就简单的定义一个指向一个函数的函数指针 应该是下面 double pengins int gotoEgine 之所以这样是应为优先级的问题 因为 的优先级高于 所以 pengins 3 表示 pengines 是含有 3 个指针的数组 auto pgoto gotoEngine auto plink linkEngine auto pmeto metoEngine auto 是 C 11 新添加的特性 使用 auto 会自动生成右边类型相同的变量 pgoto 跟 gotoEngine 都是函数指针 pgoto 是有 auto 自动生成的 0 auto autoPengines pengins auto 还可以生成与 pegines 相同的指针数据类型 autoPengines 0 就是指 pengines 0 即 gotoEngine 这个函数 pengins 是一个函数指针数组 它的元素是函数指针 存储的都是函数指针 很显然 pengins 就是一个指向函数指针的指针 我们还可以创建指向整个指针数组的指针 由于 pengins 是指向函数指针的指针 因 此指向数组的指针将是这样的指针 也就是指向指针的指针 我们可以用 C 11 的新特性 用 auto 关键字定义这样一个指针 auto pc 当然你也可以自己声明 由于相对与 pengins 来说 该指针多了一层间接 所以可以 这样定义 double pd 3 int 这种定义 开始理解会比较费劲儿 我们应该从外到里逐层剖析 要了解 pd 为什么要这样定义 我们首先得知道 pengins 是如何定义的 double pengins 3 int gotoEngine linkEngine metoEngine 由于 pd 比 pengins 多了一层 第一步 double int 第二部 double 3 int 第三步 double pd 3 int pd 其实就是替代了 double pengins 3 int 中 pengins 的位置 而且指针深度更深一 层 按照这个原理 我们可以定义指针层度更深的函数指针 首先我们把 pd 也变成数组 可以如下定义 double pd 2 3 int 为了方便后面的演示 我们再定义一个 double pf 2 3 int 我们再定义一个数组 pe 把 pd 和 pf 都能装下去 按照上面的方式 第一步 double int 第二部 double 3 int 第三步 double 2 3 int 第四部 double pe 2 3 int 第五步 double pe 2 2 3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年福建师范大学平潭附属中学招聘7人考前自测高频考点模拟试题及参考答案详解1套
- 2025安徽阜阳市颍上县人民医院引进博士研究生2人考前自测高频考点模拟试题含答案详解
- 2025年桦甸市产业发展有限公司招聘模拟试卷附答案详解(典型题)
- 2025湖南怀化市新晃侗族自治县人民医院招聘11人模拟试卷带答案详解
- 2025嘉兴市农业农村局所属事业单位公开选聘工作人员1人模拟试卷及答案详解(新)
- 小学安全全员培训总结课件
- 安全培训教学改进课件
- 山西省【中职专业高考】2025年中职高考对口升学(理论考试)真题卷【电子与信息大类】模拟练习
- 2025年中职高考对口升学(理论考试)真题卷【公共管理与服务大类】模拟练习
- 2025年变速操纵软轴项目合作计划书
- 浙能笔试题库
- 2023年航空公司招聘:机场安检员基础知识试题(附答案)
- 道路车辆清障施救服务 投标方案(技术方案)
- 港口机械设备的维护与故障排除考核试卷
- 成人糖尿病食养指南(2023年版)
- 地方病防治技能理论考核试题
- 糖尿病临床病例分析经典案例
- 用绝对值的几何意义来解题市公开课一等奖省赛课微课金奖课件
- 四川省高等教育自学考试自考毕业生登记表001汇编
- 人工智能在个性化健康风险评估中的应用
- DB35T 2054-2022 智慧消防 信息平台通用技术要求
评论
0/150
提交评论