c++学习之reference

发布时间 2023-07-14 19:05:38作者: weixicai

主内存中内存单元(比特)有唯一编号,可寻址。c语言中变量可占用连续几个比特,那么有几种办法定位变量占用的地址?

 

变量名,引用,指针都是地址的别名

int num = 5;

1, 直接变量名的地址,一阶指针

int *r1 = #

 *r1是num的内容,r1内指向num的地址。

 

2, 取地址+解引用+取地址,原地址有了别的变量名,

int *r2 = &r1;

 **r2是num的内容,*r2内指向num的地址。

 

3, 取地址+解引用+取地址+解引用,原地址有了别的变量名,

int *r3 = &r2;

 ***r3是num的内容,**r3内指向num的地址。

以及等等。

 

利用*和&互为逆运算,猜测编译器会自动消除冗余项;一个地址可以有很多种名称,但都指向同一个内存区域。

 

这些变量名+1具有不同的效果,++num, ++r1, ++r2, ++r3,

 

地址+1的形式 ++(&num), ++r1, ++(*r2), ++(**r3),

数值+1的形式 ++num, ++(*r1), ++(**r2), ++(***r3),

 

如果禁止地址发生变化,形式上取最简单的一阶指针的形式,那么就是const type_name *. 取个简单别名然后让编译器去翻译成指针的形式,确实聪明。

 

以上仅仅从自己的角度去猜测reference是什么,以为为什么这样。