1.8、左值引用和指针的区别?
本质区别
- • 引用是别名:引用是变量的别名,它和变量绑定后,就不能再绑定到其他变量。引用在底层实现上通常被认为是常量指针,但其行为更像是变量的别名。
- • 指针是变量:指针是一个变量,存储的是另一个变量的地址。指针可以随时指向不同的变量。
初始化
- • 引用必须初始化:引用在声明时必须立即初始化,且一旦初始化后就不能改变引用的对象。
- • 指针可以不初始化:指针在声明时可以不初始化,可以先声明后赋值。但未初始化的指针(野指针)是很危险的。
空值
- • 引用不能为空:引用不能为空,因为它必须是某个已存在变量的别名。
- • 指针可以为空:指针可以被赋值为空指针(nullptr 或 NULL),表示它当前没有指向任何有效的内存地址。
可修改性
- • 引用的指向不可修改:引用一旦绑定到一个变量,就不能再改变它的指向,始终只能是该变量的别名。
- • 指针的指向可以修改:指针可以随时指向不同的变量,可以通过赋值操作改变指针的指向。
操作方式
- • 引用直接访问:对引用的操作等同于对原变量的直接操作,无需解引用。
- • 指针需要解引用:通过指针访问其指向的变量,需要使用解引用操作符
*
。
类型安全
- • 引用更安全:引用被认为是更安全的,因为它们不能为空,且必须初始化,降低了出错的可能性。
- • 指针需要类型检查:指针操作需要注意类型匹配,避免访问非法内存。
内存占用
- • 引用:引用并不占用额外的存储空间,它只是原变量的别名。
- • 指针:指针本身占用一定的存储空间,用于存储地址。
总而言之,引用在很多方面表现得更像是变量本身,而指针则是一个独立的实体,存储地址,提供了更大的灵活性但也要求更谨慎的使用。引用通常用于函数参数传递,以避免不必要的拷贝,同时保证函数内部对变量的修改能够影响到外部。指针则常用于动态内存管理、数据结构等方面。
本文首发于【讳疾忌医-note】公众号,未经授权,不得转载。
(加入我的知识星球,免费获取账号,解锁所有文章。)
阅读剩余
版权声明:
作者:讳疾忌医-note
链接:https://www.1217zy.vip/archives/1186
文章版权归作者所有,未经允许请勿转载。
THE END