int a = 10;
int& ref = a; // ref 是 a 的引用(别名)
ref = 20; // 实际上是修改 a 的值
输出:
std::cout << a << std::endl; // 输出 20
std::cout << ref << std::endl; // 输出 20
✅ 说明:
ref
和a
实际上是同一个变量,两者操作互通。
比较点 | 引用(Reference) | 指针(Pointer) |
---|---|---|
语法简洁 | 是 | 否 |
必须初始化 | 是 | 否(可为 nullptr) |
可否改变指向 | 否(绑定后不可更改) | 是(可以指向别处) |
可否为 null | 否 | 是 |
支持运算 | 否 | 是(可以加减) |
void add(int& x) {
x += 1;
}
int a = 5;
add(a); // a 变为 6
✅ 使用引用可以避免复制,提高效率。
int& getElement(int arr[], int index) {
return arr[index];
}
int nums[3] = {1, 2, 3};
getElement(nums, 1) = 10; // 修改第二个元素
引用必须在定义时初始化:
int& r; // ❌ 错误!必须初始化
一旦绑定就不能更换:
int a = 10, b = 20;
int& r = a;
r = b; // 修改 a 的值为 20,而不是让 r 引用 b!
void update(int* ptr, int& ref) {
*ptr = 100;
ref = 200;
}
int a = 1, b = 2;
update(&a, b);
// a = 100(通过指针)
// b = 200(通过引用)
建议:在不需要空指针和地址运算时,优先使用引用 而不是指针。