在线等待:关于指针与引用的问题.

来源:百度知道 编辑:UC知道 时间:2024/05/10 08:32:04
为什么指针和引用可以直接操纵数据本身?而如果在函数调用的时候不使用指针或者引用,则操纵的只是数据的副本。从哪儿可以看到这相关的知识?
我想知道他们的内部实现相关的知识.
在线待待,谢谢!

内部实现:
传值:在运行的时候,COPY你原来的对象,用副本传递过去。
传指针:传指针的本质还是传值,只不过传递的是指针的值。因为指针的意义更大在于对其提领之后的值,也就是它所指向的对象,也就是说,指针放的是对象在内存中的地址。
传引用:引用在内部实现上其实还是使用的指针,只不过是编译器帮你做了罢了。

请看下面这个小程序的反汇编代码:
int main()
{
int a = 10;
int b = 100;

int* pa = &a;

int& fa = a;

return 0;
}

int main()
{
004113D0 push ebp
004113D1 mov ebp,esp
004113D3 sub esp,0F0h
004113D9 push ebx
004113DA push esi
004113DB push edi
004113DC lea edi,[ebp-0F0h]
004113E2 mov ecx,3Ch
004113E7 mov eax,0CCCCCCCCh
004113EC rep stos dword ptr es:[edi]
int a = 10;
004113EE mov dword ptr [a],0Ah
int b = 100;
004113F5 mov dword ptr [b],64h

int* pa = &a;
004113FC lea eax,[a]
004113FF mov dword ptr [pa],eax

int