概念
指针(Pointer)
- 一个指针变量保存的是 另一个变量的内存地址。
 - 指针本身也是一个变量,有自己的地址、类型大小、可被修改(除非是 
const指针)。 - 通过指针,你可以访问 / 操作指向那个地址的变量(前提是这个地址合法、类型匹配)。
 - 指针有可能是 “空”(
nullptr或在 C 时代是NULL),意味着它不指向任何有效对象。 
符号回顾:
T* p;表示 p 是一个指向类型 T 的指针。&x是“取地址”操作符,给出变量 x 的内存地址(类型是 T* 如果 x 是 T)。*p是 “解引用” 操作符(dereference),它指向指针 p 所指的东西(如果合法)。
指针 = 存地址的变量
解引用 = “通过地址拿到那个地址里的值 / 对象”
引用(Reference)
- 引用是某个变量的一个别名。换句话说,引用和它引用的对象本质就是同一个实体(在语义层面)。
 - 引用在定义时必须被初始化(必须立刻绑定到一个变量)。
 - 引用一旦绑定,就不能改指向别的东西(不能“变成”别的变量)。
 - 引用不能为 “空” —— 它总是引用一个有效的对象(至少从语言层面如此)。
 - 语法上用 
T& r = x;表示 r 是类型 T 的引用,绑定到变量 x。 
在底层(编译器/实现层面)引用常被实现为指针,但在语言层面你不能把引用当作指针那样操作(不能重新赋地址、不能有空引用、不能做算术操作等)。
引用 = 给已有对象一个别名,用起来像直接用那个对象。
解引用(Dereference)
- 解引用是指当你有指针 p,用操作符 *p 去访问 / 操作它所指向的对象(即“跳到”那个地址,拿到那个内存位置的值或进行操作)。
 - 用 * 对指针操作,就称之为解引用。
 - 注意:解引用必须保证 p 是合法指向一个对象,否则是未定义行为(会崩、出错)。
 
1  | 
  | 
1  | x = 10  |