1.指针和引有什么区别?(从反汇编角度回答)
a.其实引用和指针本质上是一样的,他们的汇编指令都是两行。
int a = 10;
int *p = &a;
//lea eax,[a] 将a的地址放在eax寄存器中
//mov dword ptr [p], eax 将eax寄存器中的值给p
int &q = q;
//lea eax,[a] 将a的地址放在eax寄存器中
//mov dword ptr [q],eax 将eax寄存器中的值给q
可以通过引用或指针解引用改变变量的值,这两种操作产生的汇编指令也是一样的。
*p = 20;
//mov eax, dword ptr[p] 将p的值(即变量a的地址)放在eax寄存器中
//mov dword ptr[eax], 14h 将14h赋值给eax寄存器中保存的变量
q = 20;
//mov eax,dword ptr[q] 将q的值(即变量a的地址)放在eax寄存器中
//mov dword ptr[eax],14h 将14h赋值给eax寄存器中保存的变量
b.定义引用变量必须初始化,指针变量可以初始化。引用其实就是C++中的常量指针。表达式int &p = a;实则会被编译器编译为int *const p = &a;所以,引用变量必须初始化是因为const类型变量必须初始化。
c.引用变量定义时引用谁,永远引用谁。一经引用,不能改变。指针可以更改其指向,指向别的变量。<