引用的本质是什么

引用的本质是什么 引用的本质是什么 引用的本质是什么

计算机的存储,只有地址和空间,简单的说就是一个地址代表一个最小内存空间8bit

内存是以字节为单位进行编址的,内存中的每个字节都对应一个地址,通过地址才能找到每个字节。

有了这个概念以后看下面的代码

int a = 1

这个时候 int a = 1int代表什么意思呢?

int的存储大小是4个字节,所以在这里int就是代表了a这个变量的存储空间要有4个字节

引用的本质是指针

引用是个别名…引用作为目标的别名而使用…引用不是值不占存储空间…引用只有声明,没有定义…

在编译器将你的代码生成目标文件时,它会用这个地址替代所有的a,因此目标文件中也就没有变量名a了,所以,变量名a不会占用内存。


首先,我们需要澄清几个概念。

指针常量:这是一个指针,其指向的地址在初始化后不能改变,但指向的内容(即该地址上的值)是可以改变的。换句话说,你不能让这个指针指向另一个地址,但你可以改变它当前指向地址上的值。
例如:

c

int x = 10;  
int *const ptr = &x;  // 这是一个指针常量  
*ptr = 20;  // 这是允许的,因为我们改变了ptr指向的内容  
ptr = &y;  // 这是不允许的,因为ptr是一个指针常量

常量指针:这是一个指针,它指向一个常量值,也就是说你不能通过这个指针来改变它指向的内容,但你可以让这个指针指向另一个地址。
例如:

c

const int x = 10;  
const int *ptr = &x;  // 这是一个常量指针  
// *ptr = 20;  // 这是不允许的,因为ptr指向一个常量  
ptr = &y;  // 这是允许的,因为ptr本身不是一个常量

现在,关于“引用”的概念:

在C++中,引用(reference)不是一个指针类型,但它与指针有相似的行为。引用是一个已存在变量的别名,也就是说,引用和变量共享相同的内存地址。一旦一个引用被初始化,它就不能再被重新引用到另一个对象上(这与指针常量相似)。同时,你不能通过引用来改变它所引用的对象的类型(这与常量指针的某种限制相似,尽管不完全相同)。但是,你可以通过引用来改变它所引用的对象的值(除非该对象本身是一个常量)。

例如:

cpp

int x = 10;  
int &ref = x;  // 这是一个引用  
ref = 20;  // 这是允许的,因为我们改变了ref(也就是x)的值  
// ref = y;  // 这是不允许的,因为引用一旦初始化就不能再指向另一个对象

所以,从某些方面来说,引用在某些行为上类似于指针常量(即你不能让引用指向另一个对象),但从另一方面来说,它又不完全等同于指针常量或常量指针,因为它与它所引用的对象共享内存地址,并且可以通过引用来改变该对象的值(除非该对象是常量)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值