主内存中内存单元(比特)有唯一编号,可寻址。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是什么,以为为什么这样。