引用(变量的别名)

引用(变量的别名)

引用就是某个目标变量的“别名”(alias),对引用的操作与对变量直接操作效果完全相同。

申明一个引用的时候,切记要对其进行初始化。

引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名的别名。

声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。

不能建立数组的引用。

那它到底存储在哪里呢?我猜测应该是符号表


程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址等【符号表生成后不再改变】

故指针的名字和指针的地址不能改变,但是指针中地址空间内存放的地址能够改变(指针变量的值可以改) 而引用指向的不能改。


我猜测变量的引用应该包含了变量的首地址其首地址的寻址能力

指针的别名可能包含了指针的首地址,首地址的寻址能力,存储地址的寻址能力

int a =100
int *p = &a;

*p
输出100

*p的时候就是解析了p存储的地址xxx,并知道了地址xxx的寻址能力,才能解析出是100


注:所有变量,还是指针等等数据类型,都是地址,一般都是那块区域的首地址,不同的类型(int,float,char,string),代表的是首地址的寻址能力。

int *p ;

p是指针的别名,就是指针首地址的别称,*表示表示p是指针,所以占内存四个地址(32位的情况下),即表示了指针首地址的寻址能力是4,int代表了这四个地址块区域存储的地址的寻址能力,即指针存储地址的寻址能力。

int a = 100;
p = &a;

a是变量a首地址的别名,int表示了首地址的寻址能力是4。

&a 表示对int型变量a取其首地址

p = &a; 表示将int型变量a的首地址赋值给int型指针p;这里本质上的意思是变量a首地址的赋值给了int *p 中的*,int型表示的寻址能力,对应了int *p中的int。至于a和p都是别名。不存储在内存空间中,可能只是存储在编译时生成的字符表中。


参考文献

  1. https://blog.csdn.net/qq_42024067/article/details/107520230
  2. https://www.cnblogs.com/hongzg1982/articles/2145312.html
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值