指针是存储地址的变量,引用是变量的别名。指针可以为空、可修改指向、需解引用访问,占用独立内存;引用必须初始化、不可更改绑定对象、直接使用更安全,常用于避免拷贝和简化函数参数传递。1. 指针保存变量地址,支持动态内存分配、多级指针等操作。2. 引用作为别名不占额外内存,提升效率且更安全。3. 使用上,需灵活指向或允许空时用指针,仅做别名且不变时用引用。

指针和引用是C++里两个非常基础但又容易混淆的概念。它们都跟内存地址打交道,但本质上一个是“操作地址”,另一个更像是“起别名”。理解清楚这一点,很多问题就迎刃而解了。

指针的本质:存储地址的变量
指针是一个变量,它保存的是另一个变量的地址。你可以通过这个地址去访问或修改那个变量的值。

比如:
立即学习“C++免费学习笔记(深入)”;
int a = 10;int* p = &a;
这里的
p
是一个指向
int
类型的指针,它保存了变量
a
的地址。你可以对指针做加减、赋值、解引用等操作。

常见用法包括:
动态内存分配(new/delete)函数参数传递时修改原始数据数组遍历、链表、树等数据结构实现
需要注意的地方:
指针可以为
nullptr
,表示不指向任何对象指针可以重新赋值,指向不同的变量多级指针(如
int**
)在某些场景下很有用,但也更复杂
引用的本质:变量的别名
引用更像是一个“别名”,它并不真正占用额外的内存空间(编译器通常会把它优化成指针),但它从语法上看起来就像是原变量本身。
例如:
int a = 10;int& ref = a;
这里
ref
就是
a
的别名,对
ref
的修改其实就是对
a
的修改。
关键特点包括:
引用必须初始化,且不能更改绑定对象引用不会为空,使用起来比指针更安全引用常用于函数参数和返回值,避免拷贝提升效率
举个例子,如果你写一个交换函数:
void swap(int& a, int& b) { int temp = a; a = b; b = temp;}
这样调用的时候就可以直接传变量进去,不用取地址,代码也更清晰。
指针与引用的核心区别
是否可为空可以是 @@######@@不可以为空是否能改变指向可以重新赋值初始化后不能改变是否需要解引用需要 @@######@@ 来访问直接当作变量使用内存占用占用指针大小(通常是4或8字节)编译器处理,可能没有额外开销
还有一个比较微妙的区别是语义上的:指针强调“我指向某个地方”,引用强调“我就是它”。
使用建议:什么时候用指针?什么时候用引用?
简单来说:
如果你需要改变指向的对象,或者允许“空”的情况,那就用指针如果你只是想对一个对象做别名,并且不需要中途换人,那引用更合适
举个例子,在类成员中,如果你希望保存一个外部对象的引用,但后续可能会变,那还是得用指针;而像 STL 容器的
nullptr
返回的就是引用,因为它的作用就是直接访问元素,而不是复制一份。
再比如函数参数传递时:
基本类型传值就行对象较大时用 const 引用避免拷贝需要修改实参时用引用或指针都可以,引用写法更简洁
基本上就这些。指针和引用看似差不多,其实一个重在操作地址,一个重在建立别名。理解清楚它们的不同,写 C++ 时才会更有底气。
*
operator[]
以上就是如何理解C++中的指针和引用 地址操作与别名机制本质区别的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1474555.html
微信扫一扫
支付宝扫一扫