C++中指针和引用的区别
指针和引用的定义和性质区别:
(1)指针:指针是一个变量,只不过这个变量存储的是一个地址, 指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不 过是原变量的一个别名而已。如:
int a=1;int *p=&a;
int a=1;int &b=a;
上面定义了一个整形变量和一个指针变量 p,该指针变量指向 a 的存 储单元,即 p 的值是 a 存储单元的地址。
而下面 2 句定义了一个整形变量 a 和这个整形 a 的引用 b,事实上 a 和 b 是同一个东西,在内存占有同一个存储单元。
(2)可以有 const 指针,但是没有 const 引用;
(3)指针可以有多级,但是引用只能是一级(int **p;合法 而 int &&a 是不合法的)
(4)指针的值可以为空,但是引用的值不能为 NULL,并且引用在 定义的时候必须初始化;
(5)指针的值在初始化后可以改变,即指向其它的存储单元,而引 用在进行初始化后就不会再改变了。
(6)sizeof 引用得到的是所指向的变量(对象)的大小,而 sizeof 指 针得到的是指针本身的大小;
(7)指针和引用的自增(++)运算意义不一样;
相同点:
1. 都是地址的概念;
指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的 别名。
区别:
1. 指针是一个实体,而引用仅是个别名; 2.
引用使用时无需解引用(*),指针需要解引恒为真,sizeof(T)
== sizeof(T&) 恒为真,但是当引用作为成员时,其占用空间与指针 相同(没找到标准的规定)。
7. 指针和引用的自增(++)运算意义不一样;