引用(变量的别名)
引用就是某个目标变量的“别名”(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;