指针与引用的故事
在学习C++引用是一个比较容易混淆的东西,“引用是一个变量的别名”这貌似是很多教材中对引用的定义,貌似老师还会举一些什么张三李四的例子,但是我觉得对于学习C++的人来说该清楚引用还是有必要的。
我认为引用就是C++把指针包装了一下然后提供给我们用的一个相对安全方便的东西。
我个人把引用理解为一个 const 指针,引用一旦初始化不能改变其指向的对象。下面举了一个例子来支持我的想法:
int a;
int *const conPtr = &a;
int &ref = a;
while (cin >> a)
{
cout << "&a\t" << &a << endl;
cout << "conPtr:\t" << conPtr << endl;
cout << "*conPtr:\t" << *conPtr << endl;
cout << "ref\t" << ref << endl;
cout << "&ref\t" << &ref << endl;
}
输出结果为:
12
&a 001EFC5C
conPtr: 001EFC5C
*conPtr: 12
ref 12
&ref 001EFC5C
这段程序证实了我的想法:引用ref的本质其实就是conPtr,我们可以理解成每当我们用到ref的时候C++都已经是进行解引用操作符(*conPtr)。这样我们就可以放心的使用ref而不用担心ref指向其他的内存地址。
顺便提一下引用较之指针的优点:
1. 引用声明的时候必须初始化,且之后不能将其指向其他对象,这样就可以保证引用不会指向未分配的内存地址。(若指向的内存地址被释放了那么引用也会发生错误)
2. 引用不能申明为NULL,这样就不会发生像空指针一样的危险情况。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述