指针和引用

指针

指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;
引用:跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。

区别

  • 引用不可以为空,当被创建的时候,必须初始化,而指针可以是空值,可以在任何时候被初始化。

  • 指针可以有多级,但是引用只能是一级(int **p;合法 而 int &&a是不合法的)

  • 指针的值可以为空,但是引用的值不能为NULL,并且引用在定义的时候必须初始化;

  • 指针的值在初始化后可以改变,即指向其它的存储单元,而引用在进行初始化后就不会再改变了。

  • ”sizeof引用”得到的是所指向的变量(对象)的大小,而”sizeof指针”得到的是指针本身的大小;

  • 指针和引用的自增(++)运算意义不一样;

  • 如果返回动态内存分配的对象或者内存,必须使用指针,引用可能引起内存泄漏;

  • 其实,所谓的可以有const指针,但是没有const引用 是指: const指针:如 int* const p; 是可以有的,此时指针包含的地址是常量,不能修改,但可修改指针指向的数据。 注意与 const int* p;的区别,此时指针指向的数据为常量,不能修改,但可以修改指针包含的地址,即指针可以执向其他地方。 而所谓没有const引用,具体指没有int& const a这种形式,而const int& a是有的。前者指引用本身即别名不可以改变,这是当然的,所以不需要这种形式,后者指引用所指的值不可以改变。

参考

https://blog.csdn.net/qq_27678917/article/details/70224813

原文地址:https://www.cnblogs.com/code-fun/p/15407138.html