读书笔记 ——《系统程序员成长计划》篇4:拥抱变化
说明:
本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。
QQ 群 号:513683159 【相互学习】
内容来源:
《系统程序员成长计划》
上一篇:读书笔记 ——《系统程序员成长计划》篇3:双链表
下一篇:读书笔记 ——《系统程序员成长计划》篇5:数据放在哪?
目录:
- 一、需求描述
- 二、解决方案
- 1、实现多个函数,需要哪个调用哪个
- 2、传入附加参数决定打印的数据类型
- 3、回调函数法
- ①定义函数指针类型
- ②声明dlist_print函数
- ③实现dlist_print函数
- ④调用方法
- 注意点
- 1、不要写重复代码
- 2、任何回调函数都要有上下文
一、需求描述
为通用链表编写一个通用的打印函数,即:链表结点的数据类型可能千变万化,这就导致进行输出时不同数据类型都需要实现一个print函数
二、解决方案
1、实现多个函数,需要哪个调用哪个
为每种数据类型编写对应的print函数,由于效果类似故会带来大量重复代码。
2、传入附加参数决定打印的数据类型
需有穷的将可能情况都实现,较为复杂。
3、回调函数法
将具体打印输出的函数由调用者自己编写,可准确适配数据类型。
具体实现步骤:
①定义函数指针类型
typedef DListRet (*DListDataPrintFunc)(void *data);
②声明dlist_print函数
DlistRet dlist_print(DList *thiz,DListDataPrintFunc print);
③实现dlist_print函数
DlistRet dlist_print(DList *thiz,DListDataPrintFunc print)
{DListRet ret = DLIST_RET_OK;DListNode* iter = thiz->first;while(iter != NULL){print (iter->data);iter = iter->next;}return ret;
}
④调用方法
static DListRet print_int(void* data)
{printf ("%d",(int)data) ;return DLIST_RET_OK;
}
...
dlist_print(dlist, print_int);
注意点
1、不要写重复代码
若有几个类似功能的函数,则要注意去除重复代码。
重复代码的缺点:
1.重复代码更容易出错。
2.重复代码经不起变化。
2、任何回调函数都要有上下文
上下文(context = ctx):回调函数的额外参数。(避免使用全局变量)
为保证能保存任何数据类型,选择void*
数据结构。
通常将其置于第一个形参,上面的print函数中thiz == ctx
读书笔记 ——《系统程序员成长计划》篇4:拥抱变化相关推荐
- 读书笔记 ——《系统程序员成长计划》篇3:双链表
说明: 本文章旨在总结备份.方便以后查询,由于是个人总结,如有不对,欢迎指正:另外,内容大部分来自网络.书籍.和各类手册,如若侵权请告知,马上删帖致歉. QQ 群 号:513683159 [相 ...
- 读书笔记 ——《系统程序员成长计划》篇5:数据放在哪?
说明: 本文章旨在总结备份.方便以后查询,由于是个人总结,如有不对,欢迎指正:另外,内容大部分来自网络.书籍.和各类手册,如若侵权请告知,马上删帖致歉. QQ 群 号:513683159 [相 ...
- 读书笔记 ——《系统程序员成长计划》篇2:封装
说明: 本文章旨在总结备份.方便以后查询,由于是个人总结,如有不对,欢迎指正:另外,内容大部分来自网络.书籍.和各类手册,如若侵权请告知,马上删帖致歉. QQ 群 号:513683159 [相 ...
- 读书笔记 ——《系统程序员成长计划》篇7:动态数组
说明: 本文章旨在总结备份.方便以后查询,由于是个人总结,如有不对,欢迎指正:另外,内容大部分来自网络.书籍.和各类手册,如若侵权请告知,马上删帖致歉. QQ 群 号:513683159 [相 ...
- 读书笔记 ——《系统程序员成长计划》篇1:代码风格
说明: 本文章旨在总结备份.方便以后查询,由于是个人总结,如有不对,欢迎指正:另外,内容大部分来自网络.书籍.和各类手册,如若侵权请告知,马上删帖致歉. QQ 群 号:513683159 [相 ...
- 读书笔记 ——《系统程序员成长计划》篇6:写的又快又好的秘诀
说明: 本文章旨在总结备份.方便以后查询,由于是个人总结,如有不对,欢迎指正:另外,内容大部分来自网络.书籍.和各类手册,如若侵权请告知,马上删帖致歉. QQ 群 号:513683159 [相 ...
- 啊哈c语言读后感500字,《麦田里的守望者》读后感读书笔记500字五篇
<<麦田里的守望者>读后感读书笔记500字五篇>由会员分享,可在线阅读,更多相关<<麦田里的守望者>读后感读书笔记500字五篇(5页珍藏版)>请在人人文 ...
- 系统程序员成长计划-管道过滤器(Pipe-And-Filter)模式
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 系统程序 ...
- 《系统程序员成长计划》成长过程
转载时请注明出处和作者联系方式 文章出处:http://www.limodev.cn/blog 作者联系方式:李先静 <xianjimli@gmail.com> <系统程序员成长计划 ...
- 《Android群英传》读书笔记---10.2(终篇)
<Android群英传>读书笔记-10.2 标签(): android中级 读书笔记 Activity过渡动画 曾经的 Android在Activity之间进行跳转的时候,只是非常生硬的切 ...
最新文章
- java方块排序_[代码全屏查看]-NxN方块排序,可自动运行
- Android Volley完全解析2:使用Volley加载网络图片
- 卷积神经网络Convolutional Neural Network (CNN)
- ftp协议是一种用于_______的协议_网工知识角|快速理解FTP和TFTP的区别,实用收藏...
- 下载安装oracle旧版本oracle 12c的详细步骤
- Python操作Excel表格
- C# WinForm中获取当前程序运行目录的方法
- matlab解六元一次方程,如何用MATLAB编写六元一次方程组
- 【FPGA入门一】一个简单的LED流水灯
- 前端自学之HTML(02)
- linux的层次结构模型,linux 设备模型(1)
- 逆天了word 90后:情人节巧用小小技术就俘获了女神
- 算法学习之Trie树
- 源码解析-深刻理解Hash HashTable HashMap原理及数据hash碰撞问题
- 人的一生,到底在追求甚麼
- 实物图鉴TMS320F2812PGFA代理销售现货价格
- 完美解决 bash: /dev/fd/63: No such file or directory
- BZOJ2535: [Noi2010]Plane 航空管制2
- Inno Setup 语法
- 【Qt】条形码制作器(Code39编码)
热门文章
- 云计算中的Server Consolidation
- Consolidation Mappings
- 图的表示(Adjacency List + Adjacency Matrix)
- python——自动化报告word(1)
- 使用 dfuse 无缝过渡到 EOSIO 1.8
- 多个订单待付款半小时倒计时功能
- flea-jersey使用之Flea RESTful接口客户端接入
- 带sex的net域名_域名劫持的几种方法、域名劫持有什么方式
- 滴滴出行,我看行!裁员光明正大,补偿给足
- 以太网协议------802.1q,802.1d,802.1x