代码大全第13章笔记: 不常见的数据结构

指针:
从概念上讲,每一个指针都包含两个部分:内存中的某处位置,以及如何解释该位置中的内容。

使用指针的一般技巧:
对解决很多类型的程序错误来说,最容易的一部分是定位错误,而难的是更正错误。。。
更正指针错误的大部分工作便是找出它的位置。

几种正确的写法。
把指针操作限制在子程序或者类里?假设你在程序中多次使用了一个链表,每次使用它的时候,不要通过手动操作指针去遍历,应该编写一组诸入NextLink(),PreviousLink(),这样的访问器子程序来完成操作更好些。
2 在靠近变量声明的位置为该变量赋初值通常是一项好的编程实践。就是定义或声明时就为其初始化。
3 在使用指针前检查指针。这个其实可以用前面的指针操作器来实现。
4 先检查指针所引用的变量再使用它。 有时你应该对指针所指向的数据执行合理性检查。
5 增加明显的冗余 就是某些特定字段重复两次,如果如果位于冗余字段中的数据不匹配,就可以确定数据已经破坏了。
6 用额外的指针变量来提高代码清晰度 一定不要节约使用指针变量,也就是说不要把同一个变量用于多种用途。
7 简化复杂的指针表达式:比如p->q->r->s.data,以增加可读性
8 粉碎垃圾数据,指针错误是很难调试的,因为你无法确定指针所指向的内存何时变成非法的。有时指针已经释放了很长一段时间,相应内存内容看起来还像是有效的。因此在c语言中,在释放内存区域之前用垃圾数据来覆盖这些内存区域,可以让使用已释放的指针有关的错误的表现方式更一致。
9 在删除或者释放指针之后把它们设置为空值。
10 在删除变量之前检查非法指针。这个要结合第9来配合使用。
以下这个例子给出了8,9,10的结合
11 跟踪指针分配情况
12 可以维护一份已经分配的空间的指针的列表。

关于全局变量
用访问子程序来取代全局数据。
防问子程序是信息隐藏的一个例子。防问器子程序允许你在不改变你房子外表的情况下重新装修内部。
比如 g_globalStatus,用于描述这个程序程序状态,可以创建两个访问器子程序:globalStatus.Get()和globalStatus.Set().
那么要求所有的代码通过访问器子程序来存取数据

如何降低使用全局数据的风险
1 创建一种命名规则来突出全局变量,使之可以把局部数据,类数据区分开。
2 为全部的全局变量创建一份注释良好的清单。
3 不要用全局变量在存放中间结果
指针:
从概念上讲,每一个指针都包含两个部分:内存中的某处位置,以及如何解释该位置中的内容。

使用指针的一般技巧:
对解决很多类型的程序错误来说,最容易的一部分是定位错误,而难的是更正错误。。。
更正指针错误的大部分工作便是找出它的位置。

几种正确的写法。
把指针操作限制在子程序或者类里?假设你在程序中多次使用了一个链表,每次使用它的时候,不要通过手动操作指针去遍历,应该编写一组诸入NextLink(),PreviousLink(),这样的访问器子程序来完成操作更好些。
2 在靠近变量声明的位置为该变量赋初值通常是一项好的编程实践。就是定义或声明时就为其初始化。
3 在使用指针前检查指针。这个其实可以用前面的指针操作器来实现。
4 先检查指针所引用的变量再使用它。 有时你应该对指针所指向的数据执行合理性检查。
5 增加明显的冗余 就是某些特定字段重复两次,如果如果位于冗余字段中的数据不匹配,就可以确定数据已经破坏了。
6 用额外的指针变量来提高代码清晰度 一定不要节约使用指针变量,也就是说不要把同一个变量用于多种用途。
7 简化复杂的指针表达式:比如p->q->r->s.data,以增加可读性
8 粉碎垃圾数据,指针错误是很难调试的,因为你无法确定指针所指向的内存何时变成非法的。有时指针已经释放了很长一段时间,相应内存内容看起来还像是有效的。因此在c语言中,在释放内存区域之前用垃圾数据来覆盖这些内存区域,可以让使用已释放的指针有关的错误的表现方式更一致。
9 在删除或者释放指针之后把它们设置为空值。
10 在删除变量之前检查非法指针。这个要结合第9来配合使用。
以下这个例子给出了8,9,10的结合
11 跟踪指针分配情况
12 可以维护一份已经分配的空间的指针的列表。

关于全局变量
用访问子程序来取代全局数据。
防问子程序是信息隐藏的一个例子。防问器子程序允许你在不改变你房子外表的情况下重新装修内部。
比如 g_globalStatus,用于描述这个程序程序状态,可以创建两个访问器子程序:globalStatus.Get()和globalStatus.Set().
那么要求所有的代码通过访问器子程序来存取数据

如何降低使用全局数据的风险
1 创建一种命名规则来突出全局变量,使之可以把局部数据,类数据区分开。
2 为全部的全局变量创建一份注释良好的清单。
3 不要用全局变量在存放中间结果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值