代码大全学习笔记——第十三章不常见的数据类型1
分类:
文章
•
2023-11-24 16:26:16
13.1 结构体
- 用结构体来明确数据关系
- 用结构体简化对数据块的操作:分散的数据就只能一个一个去赋值,如果是结构体那么就能直接memcpy
- 用结构体来简化参数列表
- 用结构体来较少维护
13.2 指针
用来理解指针的范例
- 内存中的位置:常用16进制形式表示,在32位处理器中是一个32位的值
- 如何解释指针所指的内容:与指针的类型有很大关系
使用指针的一般技巧
- 把指针操作限制在子程序或者类里面:这样可以把对指针的操作集中起来,便于查找指针错误操作
- 同时声明和定义指针
- 在于指针分配相同的作用域中删除指针:保持指针分配和释放操作的对称性
- 在使用指针之前检查指针:在使用 一个指针之前,要确保它指向的内存位置是合理的
- 先检查指针所引用的变量再使用它:对指针所指向的数据执行合理性检查
- 用狗牌字段来检测损毁的内存:大概的意思就是你在指针指向的内存中放入特定的字段,当你释放的时候来检查这个字段,如果这个字段的数据被修改了,那么就可以断定操作这个地址的指针被误操作了
- 增加明显的冗余:另一种判断内存数据是否被破坏了的方法,其实我觉得6 7这两种方式都不适合用在程序里面,而更适合在调试代码的时候,用于排除是否为指针的误操作
- 用额外的指针变量来提高代码清晰度
-
简化复杂的指针表达式
- 画一个图
- 按照正确的顺序删除链表中的指针
- 分配一片保留的内存后备区域:对于嵌入式的程序而言,这个有点不太适合,嵌入式mcu的ram空间本来就不大
- 粉碎垃圾数据:在要释放的指针指向的内存中写入垃圾数据,释放之后,就不会错用数据了
- 在删除或者释放指针之后把它们设为空值
- 在删除变量之前检查非法指针:避免二次删除释放指针
- 跟踪指针分配情况
- 编写覆盖子程序,集中实现避免指针问题的策略:就是用宏定义或子程序来实现指针的分配和释放,这样其实跟1的效果差不多,都是为了更方便的排除问题
- 采用非指针的技术
C++指针
- 理解指针和引用之间的区别:引用必须被初始化,因此引用总是引用一个对象,而指针则可以指向空值
- 把指针用于“按引用传递”参数,把const引用用于“按值传递”参数:没看懂
- 使用auto_ptr
- 灵活运用智能指针:对C++中的智能指针不太了解
C指针
- 使用显式指针类型而不是默认类型
- 避免强制类型转换:我觉得强制类型转换才体现了指针的灵活性,不知道是否正确,因为这部分也没说明强制转换有什么坏处
-
遵循参数传递的星号规则
- 在内存分配中使用sizeof()确定变量的大小:由于sizeof是在编译期间计算的,因此不会带来性能上的损失