测试代码
#include <iostream>
#include <stdio.h>
using namespace std;
void fun(int &b)
{
int a = b;
cout << a;
}
int main()
{
int a = 8;
fun(a);
return 0;
}
第二条汇编指令将8这个值存储到变量a在栈中的空间。第三条指令将变量a的地址放到寄存器eax中。
可以看到,eax的值为0x29fefc,这个地址为虚拟地址空间的地址。光标处汇编指令将该值压入栈中,作为调用函数fun()的参数
顺表提一下,为什么指针总是4字节大小,32位机器,内存最大4G,32根地址线,所以就是4个字节。
在调用fun函数后,
如图,光标处,即取出参数值,该值为变量a的地址,下一条指令根据地址取出变量a的值。由此可见,引用和指针本质上上是相同的。
但是引用更为安全。原因很简单了,用一个指针像是用一个变量一样方便,不用*取值操作。CPU的指令无非是读内存,写内存,逻辑,算数,读写寄存器。万变不离其宗