指针和引用的区别(C++)
一、C++中的指针和引用的区别
1、本质区别:指针有自己的一块空间(地址),而引用只是一个别名。

2、使用sizeof看一个指针的大小是4(64位是8),而引用是被引用对象的大小。

3、指针可以被初始化为NULL,而引用必须被初始化且必须是一个已有对象的引用。

4、作为参数传递时,指针需要被解引用才可以对对象进行操作,而直接对引用的修改都会改变引用所指向的对象。
int i = 10;
int* p= &i;
*p = 100;//<即给i赋值100,*p除了在定义时时指针之外,其他地方都称为解引用。
解引用: 引用指p指向了i的地址,要取出i的内容,就相当于从i的地址中解出内容,所以称为解引用。
5、可以有const指针,但是没有const引用。
(1)、常量指针VS常量引用
常量指针:

运行结果:

常量引用:
i = 10;
const int& ref = i;
和常量指针类似,不能通过引用修改指向的对象(i)的内容;
但是可以通过i简介改变。

运行结果:
(2)指针常量VS 引用常量
指针常量:

运行结果:

引用常量:
int& ref = i;
因为引用本身在定义时就必须进行初始化,而且不可以改变指向的对象,所以不存在引用常量这种说法,没意义。
(3)、常量指针常量
const int* const iPointer = &i;
说明: iPointer的内容和他所指向的地址中的数据均不可以改变;
6、指针在使用中可以指向其他对象,但是引用还只能是一个对象的引用,不能被改变;
7、指针可以有多级指针(**p),而引用只有一级。
eg:

8、指针和引用使用++运算符的意义不一样 ;
说明:
int i = 10;
int& iQuto = i;
int* iPointer = &i;
iQuto++;
iPointer++;
//<输出说明:
i = 11;
iQuto = 11;
iPointer指向的是i的地址的下一个地址;
*iPointer的值是i的地址的下一个地址中存储的值;
9、如果返回动态内存分配的对象或者内存,必须使用指针,引用可能引起内存泄漏。

浙公网安备 33010602011771号