C++之指针探究(十七):结构体内嵌函数指针实现分层
相关博文:C++之指针探究(十三):函数指针数组
相关博文:C++之指针探究(十二):指针、下标、数组及其作函数参数探究
相关博文:C++之指针探究(十一):函数名的本质和函数指针
相关博文:C++之指针探究(八):指针函数和函数指针
相关博文:C++之指针探究(十四):回调函数
主题:结构体内嵌函数指针实现分层
(1)程序为什么要分层?因为复杂程序东西太多一个人搞不定,需要更多人协同工作,于是乎就要分工。要分工先分层,分层之后各个层次由不同的人完成,然后再彼此调用组合共同工作。
(2)本程序要完成一个计算器。实际工作时cal.c是直接完成工作的,但是cal.c中的关键部分是调用的framework.c中的函数来完成的。
(3)先写framework.c由一个人来完成。这个人在framework.c中需要完成计算器的业务逻辑,并且把相应的接口写在对应的头文件中发出来,将来别的层次的人用这个头文件来协同工作。
(4)另一个人来完成cal.c,实现具体的计算器;这个人需要framework层的工作人员提供头文件来工作(但是不需要framework.c)
(5)分层写代码的思路是:有多个层次结合来完成任务,每个层次专注各自不同的领域和任务;不同层次之间用头文件来交互。
(6)分层之后上层为下层提供服务,上层写的代码是为了在下层中被调用。
(7)上层注重业务逻辑,与我们最终的目标直接关联,而没有具体干活的函数。
(8)下层注重实际干活的函数,注重为上层填充变量,并且将变量传递给上层中的函数(其实就是调用上层提供的接口函数)来完成任务。
(9)下层代码中其实核心是一个结构体变量(臂如本例中的struct cal_t),写下层代码的逻辑其实很简单:
第一步先定义结构体变量;
第二步填充结构体变量;
第三步调用上层写好的接口函数,把结构体变量传给它即可。
例:
附上例代码:
/*main.h文件*/
#include <stdio.h>
#include "cal.h"int add(int a,int b)
{return a+b;
}
int sub(int a,int b)
{return a-b;
}
int multiply(int a,int b)
{return a*b;
}
int divide(int a,int b)
{return a/b;
}int main()
{int ret=0;struct cal_t myCal;myCal.a=12;myCal.b=4;myCal.p=add;ret = calculator(&myCal);printf("ret=%d\n",ret);return 0;
}/*cal.h文件*/
//结构体是用来做计算器的,计算器工作时需要计算原材料
typedef int(*pFunc)(int,int);
struct cal_t
{int a;int b;pFunc p;
};
//函数原型声明
int calculator(const struct cal_t* pointer);/*framework.c文件*/
#include"cal.h"
//framework.c中应该写实际业务关联的代码//计算器函数
int calculator(const struct cal_t* pointer)
{return pointer->p(pointer->a,pointer->b);
}
C++之指针探究(十七):结构体内嵌函数指针实现分层相关推荐
- c++ 函数指针_进化论——从函数指针到被结构封装的函数指针及参数的应用举例...
↑↑↑ 点击上方公众号名称关注,不放过任何转变的机会. ✎ 编 者 悟 语 借口再小也会瓦解人的意志. 文 章 导 读 今天带大家用下函数指针,然后将函数指针和函数参数封装到结构体中,接着将数据用动态 ...
- c语言结构体内嵌结构体指针_C语言中的结构指针
c语言结构体内嵌结构体指针 Prerequisite: 先决条件: Structures in C programming language. C编程语言中的结构. Dynamic Memory al ...
- Go 学习笔记(33)— Go 自定义类型 type(自定义结构体、结构体初始化、结构体内嵌、自定义接口)
1. 自定义类型格式 用户自定义类型使用关键字 type ,其语法格式是: type newType oldType oldType 可以是自定义类型.预声明类型.未命名类型中的任意一种. newTy ...
- 【C 语言】结构体 ( 结构体中嵌套二级指针 | 为 结构体内的二级指针成员 分配内存 | 释放 结构体内的二级指针成员 内存 )
文章目录 一.结构体中嵌套二级指针 1.结构体中嵌套二级指针 类型声明 2.为 结构体内的二级指针成员 分配内存 3.释放 结构体内的二级指针成员 内存 二.完整代码示例 一.结构体中嵌套二级指针 1 ...
- golang:结构体内嵌结构体
内嵌结构体 结构体可以包含一个或多个匿名(或内嵌)字段,即这些字段没有显式的名字,只有字段的类型是必须的,此时类型也就是字段的名字.匿名字段本身可以是一个结构体类型,即结构体可以包含内嵌结构体. go ...
- Go语言学习-- No.11结构体--结构体内嵌
结构体内嵌 结构体内嵌 结构体内嵌的初始化 结构体内嵌 Go语言的结构体内嵌是一种组合特性,使用结构体内嵌可构建一种面向对象编程思想中的继承关系. 结构体实例化后,可直接访问内嵌结构体的所有成员变量和 ...
- C++之指针探究(十五):回调函数应用之qsort排序
相关博文:C++之指针探究(十三):函数指针数组 相关博文:C++之指针探究(十二):指针.下标.数组及其作函数参数探究 相关博文:C++之指针探究(十一):函数名的本质和函数指针 相关博文:C++之 ...
- PAT甲级1141 PAT Ranking of Institutions :[C++题解]结构体、排序、哈希表、结构体构造函数、结构体内写函数、排名
文章目录 题目分析 题目来源 题目分析 来源:acwing 分析:和下面这题是一道题: PAT甲级1137 Final Grading:[C++题解]结构体.排序.哈希表.结构体构造函数.结构体内写函 ...
- C指针进阶(2)(函数指针与指针函数,回调函数与转移表)
在指针万字详解这篇博客中初步介绍了函数指针与指针函数,在这篇博客中,我们将学习更多的进阶知识. 1.回忆+练习 指针进阶(2) 1.回忆+练习 2.函数指针数组,转移表 3.回调函数 在<C陷阱 ...
最新文章
- iphone微信美颜插件_Cydia插件推荐
- Linux 2.6 中的直接 I/O 技术
- 【CoppeliaSim】远程 API 之 Python 控制,对比 V-rep 有些不同
- Python Numpy学习手册(翻译自斯坦福大学 CS231n: Convolutional Neural Networks for Visual Recognition)
- 【Web安全】JSP内存马研究
- java 异常 过滤器_在过滤器Filter中抛出一个全局异常可以捕获的异常
- 腾讯的强大不是偶然,小马哥很强大
- Oracle性能监控脚本(sql)
- 阿里Seata的分布式事务实现
- 常用iOS游戏开发工具与SDK
- java实验报告遇到的问题,JAVA实验报告_doc
- 易语言静态连接器提取_vc98linker修复静态编译
- QAbstractItemModel+qtreeview
- 北大青鸟php培训怎么样,北大青鸟php培训怎么样
- can软件android,appcan-android
- 《Constrained Convolutional Neural Networks for Weakly Supervised Segmentation》翻译
- window 下使用typo3 neos 和 flows
- 2021年起重机司机(限桥式起重机)考试题及起重机司机(限桥式起重机)考试报名
- VMOS-Pro一款虚拟机app。
- 亚马逊UL2089车载电池充电器
热门文章
- 基于JAVA+Servlet+JSP+MYSQL的在线答疑系统
- java process 中断_从Java运行外部程序,读取输出,允许中断
- linq与数据库之添加
- [bzoj] 1257 余数之和sum || 数论
- struts2 自带的 token防止表单重复提交拦截器
- [禅悟人生]谦虚有助于自我消融
- 各种排序总结(三)堆排序
- [转] Linux C语言 段错误bug的调试
- 以图换字的几种方法及优劣分析
- 跑linux编译什么CPU速度快,linux 加快编译速度