代码大全学习笔记——第十三章不常见的数据类型1

13.1 结构体

  1. 用结构体来明确数据关系
  2. 用结构体简化对数据块的操作:分散的数据就只能一个一个去赋值,如果是结构体那么就能直接memcpy
  3. 用结构体来简化参数列表
  4. 用结构体来较少维护

13.2 指针

用来理解指针的范例

  1. 内存中的位置:常用16进制形式表示,在32位处理器中是一个32位的值
  2. 如何解释指针所指的内容:与指针的类型有很大关系

使用指针的一般技巧

  1. 把指针操作限制在子程序或者类里面:这样可以把对指针的操作集中起来,便于查找指针错误操作
  2. 同时声明和定义指针
  3. 在于指针分配相同的作用域中删除指针:保持指针分配和释放操作的对称性
  4. 在使用指针之前检查指针:在使用 一个指针之前,要确保它指向的内存位置是合理的
  5. 先检查指针所引用的变量再使用它:对指针所指向的数据执行合理性检查
  6. 用狗牌字段来检测损毁的内存:大概的意思就是你在指针指向的内存中放入特定的字段,当你释放的时候来检查这个字段,如果这个字段的数据被修改了,那么就可以断定操作这个地址的指针被误操作了
  7. 增加明显的冗余:另一种判断内存数据是否被破坏了的方法,其实我觉得6 7这两种方式都不适合用在程序里面,而更适合在调试代码的时候,用于排除是否为指针的误操作
  8. 用额外的指针变量来提高代码清晰度
  9. 简化复杂的指针表达式代码大全学习笔记——第十三章不常见的数据类型1
  10. 画一个图
  11. 按照正确的顺序删除链表中的指针
  12. 分配一片保留的内存后备区域:对于嵌入式的程序而言,这个有点不太适合,嵌入式mcu的ram空间本来就不大
  13. 粉碎垃圾数据:在要释放的指针指向的内存中写入垃圾数据,释放之后,就不会错用数据了
  14. 在删除或者释放指针之后把它们设为空值
  15. 在删除变量之前检查非法指针:避免二次删除释放指针
  16. 跟踪指针分配情况
  17. 编写覆盖子程序,集中实现避免指针问题的策略:就是用宏定义或子程序来实现指针的分配和释放,这样其实跟1的效果差不多,都是为了更方便的排除问题
  18. 采用非指针的技术

C++指针

  1. 理解指针和引用之间的区别:引用必须被初始化,因此引用总是引用一个对象,而指针则可以指向空值
  2. 把指针用于“按引用传递”参数,把const引用用于“按值传递”参数:没看懂
  3. 使用auto_ptr
  4. 灵活运用智能指针:对C++中的智能指针不太了解

C指针

  1. 使用显式指针类型而不是默认类型
  2. 避免强制类型转换:我觉得强制类型转换才体现了指针的灵活性,不知道是否正确,因为这部分也没说明强制转换有什么坏处
  3. 遵循参数传递的星号规则代码大全学习笔记——第十三章不常见的数据类型1
  4. 在内存分配中使用sizeof()确定变量的大小:由于sizeof是在编译期间计算的,因此不会带来性能上的损失