写C++代码时,经常遇到需要操作变量地址的场景。比如你要修改函数外的一个数,或者动态分配内存,这时候指针和引用就派上用场了。很多人刚开始学,会纠结:到底该用指针还是引用?哪个更好用?
指针:灵活但得小心
指针保存的是变量的内存地址,你可以通过它间接访问或修改数据。它最大的好处是灵活,能指向不同对象,也能置为空(nullptr),还能重新赋值。
int a = 10;
int* ptr = &a;
*ptr = 20; // a 现在变成 20
int b = 30;
ptr = &b; // 指针可以重新指向另一个变量
但灵活性也带来风险。如果忘了初始化,或者访问了已释放的内存,程序可能崩溃。就像你拿着一张过期地图找地方,容易走错路。
引用:更像别名,简单直接
引用不是独立的变量,它只是原变量的别名。一旦绑定就不能再改指向其他变量,也不会为空。
int a = 10;
int& ref = a;
ref = 25; // a 被改成 25
// ref = b; // 不能重新绑定到 b
这反而让代码更安全。比如写一个交换两个数的函数,用引用传参,读起来更自然,也不用担心空指针问题。
void swap(int& x, int& y) {
int temp = x;
x = y;
y = temp;
}
实际怎么选?看场景
如果你要实现一个链表节点,每个节点要指向下一个,那非指针不可,因为需要动态改变指向。
但如果你只是想在函数里修改传入的参数,比如调整用户输入的配置值,用引用更清晰,也少出错。
有些老代码喜欢全用指针,但现代C++更推荐优先使用引用,尤其是函数参数和返回值。只有当你需要“可能为空”或“中途换目标”的情况,才用指针。
就像工具箱里的扳手和螺丝刀,没有哪个绝对好,关键看手里干的是什么活。