C++:指针和引用的区别

指针和引用的区别

指针

对于一个类型T,T* 就是指向T的指针类型,也即一个T* 类型的变量能够保存一个T对象的地址,而类型T是可以加一些限定词的,如const、volatile等等。
在这里插入图片描述

引用

引用是一个对象的别名,主要用于函数参数和返回值类型。
在这里插入图片描述

指针和引用的区别

1. 引用在定义的时候必须进行初始化,因为我必须要知道引用的是谁,而指针没有要求,声明指针是可以不指向任何对象,也正是因为这个原因,使用指针之前必须做判空操作,而引用就不必。
2. 没有NULL引用,但是有NULL指针
3. 引用在初始化时引用一个实体后,就不能再引用其他实体,对一个对象"至死不渝"(例如ra是a的别名的话,ra就不可以是b的别名),而指针可以在任何时候指向任何一个同类型实体。
4. 在sizeof中含义不同:引用结果为引用类型的大小,但sizeof一个指针始终是地址空间所占字节个数(32位平台下占4个字节,62位平台下占8个字节)
5. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小,指向下一个对象
6. 有多级指针,但是没有多级引用
7. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理
8. 引用比指针使用起来相对更安全

总而言之,它们的这些差别都可以归结为"指针指向一块内存,它的内容是所指内存的地址;而引用则是某块内存的别名,引用不改变指向。"

特别之处const

const对指针和引用的限定是有差别的

1.常量指针and常量引用

常量指针:const放在*的左边
(例如:const int *p=&a 和 int const *p=&a)
修饰的是指针指向的内容
指针指向的内容不能通过指针来改变(*p不能改)
指针变量本身可以修改(p能改)

常量引用:const放在&的左边
(例如:const int &ra=&a 和 int const &ra=&a)
跟指针一样不能利用引用对指向的变量进行重新赋值操作。

2.指针常量and引用常量

指针常量 :const放在*的右边
(例如:int *const p=&a)
修饰的是指针变量本身
指针变量本身不可以修改(p不能改)
指针指向的内容可以通过指针来改变(*p可以改)
在定义指针常量时必须初始化!

引用常量:而这是引用天生具来的属性,不用再引用指针定义语句的引用名前加const。引用时必须要进行初始化。

3.常量指针常量and常量引用常量

常量指针常量
(例如:const int *const p=&a)
指针变量本身不可以修改(p不能改)
指针指向的内容也不可以通过指针来改变(*p也不可以改)

常量引用常量
就不存在所谓的"常量引用常量"。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值