笔记(指针和引用)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_39485740/article/details/101166815
一、引用和指针的不同点

1、从本质上来讲:引用相当于给变量存放的内存取了个别名而指针是一个指针类型的变量存放的是变量的地址。
2、从是否能为NULL来讲,引用不能为空(因为他相当于是给变量取别名,如果变量不存在则不会有别名),而指针可以为空(指针可以指向空地址)。
3、从是否需要初始化来讲,引用必须要初始化,道理同引用不能为空一样,如果不存在变量,就不会存在别名,而指针可以不用进行初始化(为初始划过的指针即是野指针指向未知的地址)。
4、从赋值之后能否再赋值角度来讲,应用不可以在初始化后在给别的变量取别名(但是可以改变变量的值),而指针可以指向别的变量。
5、从所占内存的大小角度来将,引用的大小为变量的内存大小,而指针的则为4(在32位的操作系统下)。
C++之父建议我们多使用引用,少使用指针,因为引用比指针更安全,引用不能为空所以在使用引用的时候不需要判断空,提高代码的效率;引用必须要初始化,一次取别名后不能给另一个变量取别名,这些特点也会减少野指针所带来的的错误。(const 指针虽然可以不让指针指向别的变量但是还是无法改变空指针所带来的问题)但是在管理堆内存的时候,由于堆内存无法取别名,所以必须要用指针来管理。

二、引用和指针的联系

两者都可以用于函数之间的变量共享。

int** p //合法语句,指向指针的指针
int &&p //非法语句,引用的引用
int*& p //合法语句,指向指针的引用(给存放指针的内存取了别名)
int&* p//非法语句,指向应用的指针(引用是别名,没有内存空间)

猜你喜欢

转载自blog.csdn.net/qq_39485740/article/details/101166815