指针和引用的区别(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 @   JaimeJie  阅读(1711)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示