指针和引用的区别(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、如果返回动态内存分配的对象或者内存,必须使用指针,引用可能引起内存泄漏。

posted @ 2019-12-30 14:40  JaimeJie  阅读(1769)  评论(0)    收藏  举报