C++中“引用”的使用说明(前置要求:掌握C语言)

先说疑惑点:引用到底是不是变量?占不占内存空间?

根据我查到的(我信服的):
”引用“是编译器通过“常指针”的方式实现了“变量别名”这一机制;即:
(1)“引用”本质上是常指针,占内存空间;
(2)只不过编译器隐藏了实现过程(也隐藏了用*的过程,更隐藏了这个指针本身);使“引用”看起来,用起来,就像是造出了变量别名这个新机制一样;
(3)在使用时,不需要考虑怎么实现的,就按引用的特点来用就可以。
备注:可以在参考部分看大佬反汇编的分析;

下面就抛开本质上的指针而完全按引用的特点来说明使用:

1、引用是一个变量的别名,没有新变量,只是多了一个新的名字;

(1)定义一个变量,是向内存中申请一块空间,比如int a;则申请一块int类型大小的空间,这个空间有一个地址,用a这个名字去映射这个地址,使用a就能操作这个地址上的数据;
(2)定义一个引用,比如int &b = a;则引用的特性是:b是a的内存空间的新名字,一般称为:别名,既然b和a一样都是这个空间的名字,那么怎么操作b也就相当于怎么操作a;
(3)定义引用,只是产生了一个新名字,而不是定义一个新变量,不会申请内存空间;从C++程序员角度来看,sizeof(b) 等于 sizeof(a); &b 和&a取出来的地址相同;修改b,a也被同步修改;表面上看,确实是别名的效果;
(4)引用必须在定义时初始化,且初始化后不能再改去引用其他变量;既然是别名,那肯定要有第一个名字存在,所以必须在定义时指明要引用的变量;一经初始化,b的本体被隐藏,操作b也就实在操作a,也根本不存在改变引用对象这回事;
(5)举例理解:小白因为军训晒黑了,有了新绰号小黑,虽然名字不一样,但都是小白这个人,而提出新绰号小黑也不会凭空造出一个人来;我们不会先取一个绰号放着等人晒黑,也不会把一个人的绰号转给别人;

看下面的代码,先定义变量a;再定义b引用a;

#include <iostream>
using namespace std;

int main()
{
   
    int a = 10;
    int &b = a;
    cout << a << " -a- " << &a << endl;
    cout << b << " -b- " << &b << endl;
    b=15;
    cout << a << " -a- " << &a 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值