指针:一种间接类型
特点:
- 可以 “指向” 不同的对象;
- 具有相同的尺寸。
相关操作
- & - 取地址操作符
- * - 解引用操作符
指针的定义:
int* p = &val;int* p = nullptr;
关于 nullptr
- 一个特殊的对象(类型为 nullptr_t),表示空指针;
- 类似于 C 中的 NULL,但更加安全。
指针与 bool 的隐式转换:非空指针可以转换为 true;空指针可以转换为 false;
指针的主要操作:解引用;增加、减少;判等。
void* 指针
- 没有记录对象的尺寸信息,可以保存任意地址;
- 支持判等操作。
指针的指针
指针 vs 对象
- 指针复制成本低,读写成本高
指针的问题
- 可以为空
- 地址信息可能非法
- 解决方案:引用
引用
int& ref = val;- 是对象的别名,不能绑定字面值
- 构造时绑定对象,在其生命周期内不能绑定其它对象 (赋值操作会改变对象内容)
- 不存在空引用,但可能存在非法引用——总的来说比指针安全
- 属于编译期概念,在底层还是通过指针实现
指针的引用
- 指针是对象,因此可以定义引用
int* p = &val; int*& ref = p;- 类型信息从右向左解析