C++中的指针与引用其实是一样的。从编译器的反汇编源代码可以看出,引用和指针编译器的实现都是一样的。但是在用高级语言编程时的理解是不一样的。
引用可以看作是对象的一个手柄并且是于具体的数据绑定的操作这个手柄就是操作这个变量或者对象,并且这个手柄是死的。
指针就是创造一个手柄去操作一些东西,这个手柄是活的,你可以任意的给这个手柄指向,然后通过拿这个手柄(*b)去拿这个对象或者变量。
- ;引用
- 4: int a = 5 ;
- 00401028 mov dword ptr [ebp-4],5
- 5: int & b = a;
- 0040102F lea eax,[ebp-4]
- 00401032 mov dword ptr [ebp-8],eax
- 6: int c = 2 ;
- 00401035 mov dword ptr [ebp-0Ch],2
- 7: b = c ;
- 0040103C mov ecx,dword ptr [ebp-8]
- 0040103F mov edx,dword ptr [ebp-0Ch]
- 00401042 mov dword ptr [ecx],edx
- 8: return 0;
- 00401044 xor eax,eax
- //指针
- 4: int a = 5 ;
- 00401028 mov dword ptr [ebp-4],5
- 5: int * b = &a;
- 0040102F lea eax,[ebp-4]
- 00401032 mov dword ptr [ebp-8],eax
- 6: int c = 2 ;
- 00401035 mov dword ptr [ebp-0Ch],2
- 7: *b = c ;
- 0040103C mov ecx,dword ptr [ebp-8]
- 0040103F mov edx,dword ptr [ebp-0Ch]
- 00401042 mov dword ptr [ecx],edx
- 8: return 0;
- 00401044 xor eax,eax