引用
引用的概念与定义
引用不是新定义的变量,而是给已存在变量取的一个别名。编译器不会为引用开辟新的内存空间,它与被引用的变量共用同一块内存。
语法形式为 类型& 引用别名 = 引用对象。在 C++ 中,为了避免引入过多运算符,复用了一些符号,比如引用和取地址都使用 &,使用时需根据上下文区分。
创建变量时开辟空间,例如 int i;,再定义 int& j = i;,相当于给这块空间又取了个名字 j。引用可以给一个变量取多个别名,也可以给别名再取别名。

引用的特性
- 引用在定义时必须初始化(必须明确是谁的别名)
- 一个变量可以有多个引用
- 引用一旦绑定一个实体,就不能再引用其他实体

注意,k=m 这种操作是赋值,而不是改变 k 的引用目标。图中 k 已经是 i 或 j 的别名后,就不能成为实体 m 的别名了。
引用的使用
C++ 中的引用主要是为了解决指针在某些场景下的不足,大部分情况下可以用引用替代指针,但部分底层场景仍需指针。
引用传参
之前交换两个变量的值通常使用指针,现在可以使用引用简化。
void swap(int& rx, int& ry) {
int temp = rx;
rx = ry;
ry = temp;
}
rx 和 ry 分别是 x 和 y 的别名,交换它们等同于交换原变量。引用在函数调用时才定义,此时实参已经传入。
在数据结构操作中,引用同样适用。例如链表尾插,使用二级指针比较绕,使用引用可以简化代码逻辑。
struct SListNode { int val; SListNode* next; };
// 使用引用作为形参
void ListPushBack(SListNode*& pHead, int x) {
}


