苏小研C/C++面试题及参考答案

指针和引用的区别

指针和引用是C++中用于间接访问变量的两种机制,看似相似但本质差异显著,理解这些差异对内存管理和程序稳定性至关重要。

从初始化来看,引用在定义时必须初始化,且一旦初始化就不能再指向其他对象,相当于“别名”;而指针可以在定义时不初始化,后续也能改变指向的对象,甚至可以指向空(nullptr)。例如:

int a = 10;
int& ref = a;  // 正确,引用必须初始化
int* ptr;      // 正确,指针可延迟初始化
ptr = &a;      // 指针指向a

指针可以为nullptr,而引用不存在“空引用”,这是两者在安全性上的核心区别。使用指针时需先检查是否为nullptr以避免空指针异常,而引用无需此类检查,但使用未初始化的引用会导致未定义行为。

在可修改性方面,引用的指向不可更改,一旦绑定某个对象,就始终代表该对象;指针则可以随时改变指向,指向另一个同类型对象。例如:

int a = 10, b = 20;
int& ref = a;
ref = b;  // 实际是将b的值赋给a,而非ref指向b
int* ptr = &a;
ptr = &b;  // 指针现在指向b,正确

sizeof操作的结果不同:sizeof(指针)返回的是指针本身的大小(通常为4或8字节,取决于系统位数);而sizeof(引用)返回的是被引用对象的大小。例如:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大模型大数据攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值