对象与基本类型(四)

166 阅读1分钟

指针:一种间接类型

1.PNG

特点:

  • 可以 “指向” 不同的对象;
  • 具有相同的尺寸。

相关操作

  • & - 取地址操作符
  • * - 解引用操作符

指针的定义:

  • int* p = &val;
  • int* p = nullptr;

关于 nullptr

  • 一个特殊的对象(类型为 nullptr_t),表示空指针;
  • 类似于 C 中的 NULL,但更加安全。

指针与 bool 的隐式转换:非空指针可以转换为 true;空指针可以转换为 false;

指针的主要操作:解引用;增加、减少;判等。

void* 指针

  • 没有记录对象的尺寸信息,可以保存任意地址;
  • 支持判等操作。

指针的指针

2.PNG

指针 vs 对象

  • 指针复制成本低,读写成本高

指针的问题

  • 可以为空
  • 地址信息可能非法
  • 解决方案:引用

引用

  • int& ref = val;
  • 是对象的别名,不能绑定字面值
  • 构造时绑定对象,在其生命周期内不能绑定其它对象 (赋值操作会改变对象内容)
  • 不存在空引用,但可能存在非法引用——总的来说比指针安全
  • 属于编译期概念,在底层还是通过指针实现

指针的引用

  • 指针是对象,因此可以定义引用
  • int* p = &val; int*& ref = p;
  • 类型信息从右向左解析