【C++】001、引用与指针的区别

一、本质区别:

  • 引用是对象的别名,不占用内存空间

  • 指针是一个变量,存储了对象的内存地址

二、引用与指针的五个区别点

1.初始化

  • 引用定义时必须绑定一个对象,不能是空引用

  • 指针可以不初始化,也就是一个野指针

2.内容变化

  • 引用一旦绑定,永远不能再指向另一个对象

  • 指针可以通过复制改变指向,一个指针通过赋值预算福=可以指向其他对象的地址

3.语法使用差异

  • 引用直接使用变量名来访问对象,就像普通变量一样使用

  • 指针需要用*接引用才能访问对象,使用->来访问对象的属性值和方法调用

4.空引用与空指针

  • 引用必须绑定有效对象,不允许空引用存在

  • 指针可以是nullptr,使用前需要判空

5.size计算

  • 对引用sizeof得到的是对象的大小

  • 对指针使用sizeof得到的是指针本身的大小,表示指针变量本身所占的字节数,64位的计算机结果值为8字节

三、引用的底层实现

  • 引用的底层通常使用指针常量来实现的。这是编译器常见实现方式

  • 指针常量 * const,常量其内容值不可变。这也是引用必须在初始化时绑定对象,且不可变更绑定的原因所在

代码示例

int a = 10;
int& ref = a;   // 底层:int* const ref = &a;
ref = 20;       // 底层:*ref = 20;

四、既然引用的底层是指针,为何还要创建引用

  • 引用主要是为了支持运算符重载和拷贝构造函数的使用

  • 在使用重复[] 或 = 时返回引用,可以连续复制

  • 而且引用比指针使用更安全,不用担心空指针,也不必显示解引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值