引用 —— 一个别名,多个好处
C++ 里的引用不是新变量,而是给已有变量起的别名,不占新内存,就像土豆和马铃薯是同一个东西。声明时用 &:
类型& 别名 = 变量
int a = 10;
int& num = a; // num 就是 a
这里的 & 不是取地址,而是'引用类型'。
三个不能妥协的规则
必须初始化。引用一开始就得绑定到一个对象,不能悬空。
int a = 10;
int& num = a; // 没问题
// int& num; // 编译错误,未初始化
这叫声明即绑定,不存在'空引用'。
一个变量能有多个别名,地址全都一样。
int a = 10;
int& num1 = a;
int& word = a;
int& word2 = word; // word2 还是 a 的别名
引用一旦绑定,就不能再改去引用别的变量。
int b = 10;
int a = 20;
int& num1 = b;
// int& num1 = a; // 错误,重复定义且不能更改绑定
这保证了别名的唯一性,不会出现一个引用忽然指向另一块内存。
在哪用?
函数传参避免拷贝:值传递会复制整个变量,太大的结构体开销明显,引用直接操作原数据,还不用像指针那样解引用。
void Swap(int& x, int& y) {
int temp = x;
x = y;
y = temp;
}
调用 Swap(a, b) 时,x、y 就是实参的别名,简洁高效。
修改链表头节点:如果要在链表头插入,用指针得传二级指针,用引用可以直接改:
typedef {
* next;
val;
} ListNode;
{
}


