相关博文: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++之指针探究(十七):结构体内嵌函数指针实现分层相关推荐

  1. c++ 函数指针_进化论——从函数指针到被结构封装的函数指针及参数的应用举例...

    ↑↑↑ 点击上方公众号名称关注,不放过任何转变的机会. ✎ 编 者 悟 语 借口再小也会瓦解人的意志. 文 章 导 读 今天带大家用下函数指针,然后将函数指针和函数参数封装到结构体中,接着将数据用动态 ...

  2. c语言结构体内嵌结构体指针_C语言中的结构指针

    c语言结构体内嵌结构体指针 Prerequisite: 先决条件: Structures in C programming language. C编程语言中的结构. Dynamic Memory al ...

  3. Go 学习笔记(33)— Go 自定义类型 type(自定义结构体、结构体初始化、结构体内嵌、自定义接口)

    1. 自定义类型格式 用户自定义类型使用关键字 type ,其语法格式是: type newType oldType oldType 可以是自定义类型.预声明类型.未命名类型中的任意一种. newTy ...

  4. 【C 语言】结构体 ( 结构体中嵌套二级指针 | 为 结构体内的二级指针成员 分配内存 | 释放 结构体内的二级指针成员 内存 )

    文章目录 一.结构体中嵌套二级指针 1.结构体中嵌套二级指针 类型声明 2.为 结构体内的二级指针成员 分配内存 3.释放 结构体内的二级指针成员 内存 二.完整代码示例 一.结构体中嵌套二级指针 1 ...

  5. golang:结构体内嵌结构体

    内嵌结构体 结构体可以包含一个或多个匿名(或内嵌)字段,即这些字段没有显式的名字,只有字段的类型是必须的,此时类型也就是字段的名字.匿名字段本身可以是一个结构体类型,即结构体可以包含内嵌结构体. go ...

  6. Go语言学习-- No.11结构体--结构体内嵌

    结构体内嵌 结构体内嵌 结构体内嵌的初始化 结构体内嵌 Go语言的结构体内嵌是一种组合特性,使用结构体内嵌可构建一种面向对象编程思想中的继承关系. 结构体实例化后,可直接访问内嵌结构体的所有成员变量和 ...

  7. C++之指针探究(十五):回调函数应用之qsort排序

    相关博文:C++之指针探究(十三):函数指针数组 相关博文:C++之指针探究(十二):指针.下标.数组及其作函数参数探究 相关博文:C++之指针探究(十一):函数名的本质和函数指针 相关博文:C++之 ...

  8. PAT甲级1141 PAT Ranking of Institutions :[C++题解]结构体、排序、哈希表、结构体构造函数、结构体内写函数、排名

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析:和下面这题是一道题: PAT甲级1137 Final Grading:[C++题解]结构体.排序.哈希表.结构体构造函数.结构体内写函 ...

  9. C指针进阶(2)(函数指针与指针函数,回调函数与转移表)

    在指针万字详解这篇博客中初步介绍了函数指针与指针函数,在这篇博客中,我们将学习更多的进阶知识. 1.回忆+练习 指针进阶(2) 1.回忆+练习 2.函数指针数组,转移表 3.回调函数 在<C陷阱 ...

最新文章

  1. iphone微信美颜插件_Cydia插件推荐
  2. Linux 2.6 中的直接 I/O 技术
  3. 【CoppeliaSim】远程 API 之 Python 控制,对比 V-rep 有些不同
  4. Python Numpy学习手册(翻译自斯坦福大学 CS231n: Convolutional Neural Networks for Visual Recognition)
  5. 【Web安全】JSP内存马研究
  6. java 异常 过滤器_在过滤器Filter中抛出一个全局异常可以捕获的异常
  7. 腾讯的强大不是偶然,小马哥很强大
  8. Oracle性能监控脚本(sql)
  9. 阿里Seata的分布式事务实现
  10. 常用iOS游戏开发工具与SDK
  11. java实验报告遇到的问题,JAVA实验报告_doc
  12. 易语言静态连接器提取_vc98linker修复静态编译
  13. QAbstractItemModel+qtreeview
  14. 北大青鸟php培训怎么样,北大青鸟php培训怎么样
  15. can软件android,appcan-android
  16. 《Constrained Convolutional Neural Networks for Weakly Supervised Segmentation》翻译
  17. window 下使用typo3 neos 和 flows
  18. 2021年起重机司机(限桥式起重机)考试题及起重机司机(限桥式起重机)考试报名
  19. VMOS-Pro一款虚拟机app。
  20. 亚马逊UL2089车载电池充电器

热门文章

  1. 基于JAVA+Servlet+JSP+MYSQL的在线答疑系统
  2. java process 中断_从Java运行外部程序,读取输出,允许中断
  3. linq与数据库之添加
  4. [bzoj] 1257 余数之和sum || 数论
  5. struts2 自带的 token防止表单重复提交拦截器
  6. [禅悟人生]谦虚有助于自我消融
  7. 各种排序总结(三)堆排序
  8. [转] Linux C语言 段错误bug的调试
  9. 以图换字的几种方法及优劣分析
  10. 跑linux编译什么CPU速度快,linux 加快编译速度