基础知识
- 1. 指针、引用
- 2. 数组
- 3. 缺省参数
- 4. 函数重载
- 5. 内联函数
- 6. 宏
- 7. auto
- 8. const
- 9. 类和对象
- 10. 类的6个默认成员函数
- 11. 初始化列表
- 12. this指针
- 13. C/C++的区别
- 14. C++ 三大特性
- 15. 结构体内存对齐规则
- 16. explicit
- 17. static
- 18. 友元类、友元函数
- 19. 内部类
- 20. 内存管理(虚拟地址空间)
- 21. 堆上开辟空间(malloc、calloc、realloc、free)
- 22. new、delete操作符
- 23. 内存泄漏
- 24. 智能指针
- 25. 四种转换
- 26. 继承
- 27. 多态
- 28. 模版类、模版函数
- 29. 深、浅拷贝
- 30. 二叉搜索树
- 31. 红黑树
- 32. AVL树
- 33. 哈希
- 34. STL
- 35. C++ 11
- 36. lambda 表达式
- 37. 进程与线程
- 38. C++ 线程库
- 39. B/B+树
- 40. 异常
- 41. 程序运行四个阶段
1. 指针、引用
指针: 一个实体,存放指向对象地址的变量。指向一块内存,指向可以改变,有const和非const的区别,甚至可以为空(NULL)。
引用: 变量(内存)的别名,一经定义不可修改,且必须初始化。
int A=10;
int& rA = A; //引用
int* pA = &A; // 指针
char* p = "hello"; //字符指针
int* arr[10]; //指针数组
int (*p)[10]; //数组指针
int *p = &A; //整形指针
float f = 1.0; float* pf = &f; //单精度浮点型指针
double d = 2.00; double* pd = &d; //双精度浮点型指针
注:指针与对应的变量类型保持一致。若类型不匹配可能存在以下问题:
- 错误的数据解释。解引用出错。
- 内存访问错误。触发违例,访问错误。
- 类型安全问题。破坏类型安全性,难以调试和理解。
野指针(wild): 没有经过初始化的指针。
悬空指针(dangling): 指针指向已经被释放的的内存空间的指针。
规避野指针:
- 指针创建立即初始化。
- 使用指针过程中,防止指针越界访问。
- 指针指向的空间释放,指针立即置为NULL。
- 使用指针前进行安全检查。