在c++中,引用变量是某个已存在变量的别名,通过符号&来声明。它必须在定义时绑定到具体变量,之后对这个引用做的所有操作都等于直接操作原变量。下面先看一个最基本的使用示例,再对比它和指针的差异。

一、c++怎么使用引用变量
引用的声明格式为类型& 引用名 = 原变量;,注意这里的&不是取地址,而是引用修饰符。下面代码演示了引用的基本用法:
#include <iostream>
using namespace std;
int main() {
int a = 10;
int& ref = a; // ref是a的引用(别名)
ref = 20; // 修改ref就等于修改a
cout << "a = " << a << endl; // 输出20
cout << "ref = " << ref << endl; // 输出20
cout << "&a = " << &a << endl;
cout << "&ref = " << &ref << endl; // 地址和a相同
return 0;
}
从上面可以看出,引用在底层通常也用指针实现,但对使用者来说它没有独立地址,就是原变量的另一个名字。引用常用来做函数参数和返回值,避免拷贝并且能修改实参:
#include <iostream>
using namespace std;
// 引用做参数,直接修改外部变量
void swap(int& x, int& y) {
int t = x;
x = y;
y = t;
}
int main() {
int m = 1, n = 2;
swap(m, n);
cout << m << " " << n << endl; // 输出2 1
return 0;
}
二、c++引用与指针的区别
虽然引用和指针都能间接访问变量,但他们在语法和语义上有明显不同。主要区别如下:
| 对比点 | 引用 reference | 指针 pointer |
|---|---|---|
| 初始化 | 定义时必须初始化 | 可先声明后赋值 |
| 重新绑定 | 一旦绑定不能改指其他变量 | 可随时指向别的同类型变量 |
| 空值 | 不存在空引用 | 可为nullptr |
| 内存 | 无独立地址概念 | 本身占内存存地址 |
| 访问 | 像普通变量直接用 | 需用*解引用 |
1. 语法层面示例
下面代码同时展示指针和引用,能直观看出写法差异:
#include <iostream>
using namespace std;
int main() {
int val = 5;
int& r = val; // 引用,必须初始化
int* p = &val; // 指针,存val的地址
r = 8; // 直接赋值
*p = 9; // 解引用后赋值
int other = 100;
// r = other; // 这是把other的值赋给val,不是重新绑定
p = &other; // 指针可以改指向
cout << val << " " << *p << endl;
return 0;
}
2. 安全性与适用场景
引用没有空值问题,也不会出现野引用,因此函数参数优先用引用更安全。指针适合需要表达“可能没有对象”或要动态改指向的场景,比如链表节点跳转。实际开发中,用const 类型&传大对象既能避免拷贝又防止误改,是非常常见的做法。
总结:引用是受限但更安全的别名机制,指针是更灵活但需谨慎管理的地址变量。理解两者差异,才能写出既高效又可靠的c++程序。