目录
补充一下引用的特性
- 引用在定义时必须初始化。
- 引用的关系一旦建立无法修改。
下面探讨一下引用的本质
int main(){
int n = 5;
int &ref = n;
int m = 6;
return 0;
}
调试单步走,可以看到引用的地址和值是与变量完全相同的:
思考: 引用到底有无占用内存空间?
查看内存布局,可以看到变量n的内存地址上方有一块内存存储的值恰好为变量n的地址:
为什么会专门有一块内存来存储这个地址呢?
直接在内存上修改该地址的值,修改成变量m的地址:
可以发现:在我们修改了该地址的值后,监视窗口引用的值也相应的跟随改变,引用的值也变成了变量m的值 ref = 6 。
因此可以得出结论:
引用在内存中占据了4个字节的内存空间,且存储的值就是引用所关联的对象的地址。这就表明其实引用是占一块内存的。
不就是指针!因此引用的本质就是一个指针。
总结
- 引用的本质其实就是指针。
- 为什么引用在定义的时候必须初始化:其实就是为了防止出现类似于指针的问题,在定义时就需要关联对象,将其地址存放起来,且在使用的时候无法修改,不管引用传递给谁,引用一直都会存在,从而避免了指针滥用的情况。