C++中指针和引用的区别

C++中指针和引用的区别

相同点

指针和引用都是基于地址

指针指向一块地址,指针的值是指向的变量的地址;引用就是某块内存的别名

不同

是否需要初始化

指针可以不初始化,最好初始化成空指针

引用必须在定义的时候初始化,引用必须指向一块合法内存,并且引用在初始化之后不能改变指向
是否允许为空

指针允许为空

引用必须指向一块合法内存,不允许为空

因为引用不允许引用空内容,所以在使用指针和引用时有一个区别,就是使用指针前需要做空指针的判断,但是使用引用不需要,因为引用一定合法
是否直接操作对象

指针指向变量的地址,可以通过解引用对它指向的变量进行间接操作

引用就是目标变量的别名,对引用的操作就是对目标变量本身的操作
是否是对象

指针是对象,叫指针对象,指针对象本身是有地址的,可以定义指向指针的指针

引用不是对象,引用只是一个别名,没有实际地址,不能定义指向引用的指针,也不能定义引用的引用

作用

指针和引用的主要作用体现在传参,指针传参和引用传参相比于值传参,都可以避免大数据的拷贝
看完上面这些,可以发现,引用传递的性质像指针传递,操作方式像值传递,引用可以做的事指针都可以做,那为什么还需要引用呢?

因为指针的权力太大,可以毫无约束的操作内存中的任何东西,所以很危险;如果只是想要借用一下某个对象的别名,使用引用可以避免发生意外
所以,总的来说,

  1. 当目标对象可能为空时,需要使用指针;
  2. 当你需要改变对象的指向时需要用指针,引用定义之后不能改变指向;
  3. 在重载运算符的时候应该用引用,最典型的例子是[],其典型用法是返回一个目标对象,其能被赋值
相关推荐
h39743 小时前
DirectShow过滤器开发-视频源过滤器
c++·windows·音视频·directshow
程序猿编码5 小时前
榨干 RTX5090 算力!Qwen3 专用单卡推理引擎,手写C++/CUDA 算子实现 MTP 推测解码
开发语言·c++·大模型推理·qwen3·多模态推理
西飘客6 小时前
vs 怎么根据dll 生成lib文件
c++·qt
程序员老陆7 小时前
深入理解 C++ thread_local:线程私有存储的正确打开方式
开发语言·c++·程序设计
青绿蓝LCA低碳研究院7 小时前
FSLCI首次在印度举办会议,我们需要学习什么? · 青绿蓝
经验分享
qq_284274058 小时前
机械原理笔记:平面机构自由度计算(复合铰链、局部自由度、虚约束)与四杆机构入门(含考点)
笔记·学习·平面·自动化·制造
qq_284274059 小时前
数控铣床与加工中心笔记:铣刀与刀柄系统、G54试切对刀、镜像加工指令、孔加工工艺(钻扩铰镗)与固定循环G73/G83/G81/G76/G87/G84
笔记·学习·自动化·制造
Titan202410 小时前
MySQL访问个人学习笔记
笔记·学习·mysql
半杯咖啡半行码10 小时前
C++ 编程与 STL 模板:从泛型编程到内存安全详解
开发语言·c++
sbjdhjd10 小时前
云安全 | Docker 容器逃逸复盘(三):docker.sock 挂载与 Docker-in-Docker 风险
经验分享·网络安全·docker·云原生·容器·kubernetes·云安全