C/C++中指针和引用的区别

本文详细对比了C/C++中指针和引用的区别,包括内存占用、初始化、操作方式、特性和应用场景。指针如地址簿,引用似别名,讲解了它们在参数传递、内存管理和复杂数据结构中的运用。特别强调了指针与引用在内存泄漏风险上的区别。
摘要由CSDN通过智能技术生成

指针有自己的空间,而引用只是一个别名

指针可以认为是一个比较特殊的变量,与其他变量不同之处在于,其保存的是另一个对象的地址,因此指针有自己的内存空间;而引用则是存粹的给某个对象取了一个格外的名字,比如有人大名叫大壮,小名叫小马,但指的都是同一个人。

使用sizeof看一个指针的大小是4,而引用则是被引用对象的大小

因为指针本身有自己的空间,所以sizeof得到的就是指针空间的大小,如果要得到所指对象的大小,需要先对指针进行解引用。在32位系统中,指针的大小为4字节,而64位中为8字节;引用因为只是一个别名,所以得到的就是被引用对象的大小。

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

指针作为一个变量,当然可以被赋值为NULL,即不指向任何对象,我们也把这种指针成为野指针;而引用作为某对象的别名,不存在先取一个小名,再把小名赋予某人的骚操作,所以必须被初始化为一个已有对象的引用。

作为参数传递时,指针需要被解引用才可以对对象进行操作,而直接对引 用的修改都会改变引用所指向的对象

指针解引用得到具体指的对象,引用就是具体对象本身。

可以有const指针,但是没有const引用

const int * const p可以翻译为指向一个int型常量的指针常量。第一个const是底层const,用于限制指针指向的对象是不可改变的,而第二个const是顶层const,用于限制指针指向的地址是不可改变的;而引用作为一个别名,本身一无所有,所以不存在所谓的const。

指针在使用中可以指向其它对象,但是引用只能是一个对象的引用,不能 被改变

指针就不解释了,你见过把小名自己用用给别人的吗?

指针可以有多级指针(**p),而引用至于一级

在自定义的数据结构或者多维数组中,多级指针用的很频繁。但是一个别名套一个别名是毫无意义的。

指针和引用使用++运算符的意义不一样

指针p++,指的是根据指针指向的类型,进行地址的跳跃。比如char* 类型的一次跳一个字节,int* 类型的一次跳四个字节,其目的都是为了指向下一个对应元素;而引用是某对象的别名,其加一指的就是将对象数据量加一。

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

C语言的分配:malloc+强制类型转化+一个指针;C语言的释放:free+一个指针。C++的分配:new+指针;C++的释放:delete+指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值