传引用,到底传递的什么?

来源:互联网 发布:软件测试分享ppt 编辑:程序博客网 时间:2024/04/30 15:44

您可以随便转载,但是必须保证文章的完整性,并且注明出处。

今天在C++课上,老师模棱两可地说了说C++的引用,竟然犯了引用能指向另一个变量的错误。。。

废话不多说,传引用,究竟是传什么?第一个感觉是传地址,下边让我们验证一下。

这个是我写的一段测试代码,实现了两个变量的值交换。

转到VC的反汇编下观察:

主函数中对swap函数的调用部分:

swap(m, n);

0102153C  lea         eax,[n]  ;在这里传入了n的地址

0102153F  push        eax  

01021540  lea         ecx,[m]  ;在这里传入了m的地址

01021543  push        ecx  

01021544  call        swap (102125Dh) 

01021549  add         esp,8 

swap的实现:

bool swap(int &a, int &b)

{

010214C0  push        ebp  

010214C1  mov         ebp,esp 

010214C3  sub         esp,0CCh 

010214C9  push        ebx  

010214CA  push        esi  

010214CB  push        edi  

010214CC  lea         edi,[ebp-0CCh] 

010214D2  mov         ecx,33h 

010214D7  mov         eax,0CCCCCCCCh 

010214DC  rep stos    dword ptr es:[edi] 

int temp = a;

010214DE  mov         eax,dword ptr [a]

010214E1  mov         ecx,dword ptr [eax] 

010214E3  mov         dword ptr [temp],ecx 

a = b;

010214E6  mov         eax,dword ptr [a] 

010214E9  mov         ecx,dword ptr [b] 

010214EC  mov         edx,dword ptr [ecx] 

010214EE  mov         dword ptr [eax],edx 

b = temp;

010214F0  mov         eax,dword ptr [b] 

010214F3  mov         ecx,dword ptr [temp] 

010214F6  mov         dword ptr [eax],ecx 

return true;

010214F8  mov         al,1 

}

010214FA  pop         edi  

010214FB  pop         esi  

010214FC  pop         ebx  

010214FD  mov         esp,ebp 

010214FF  pop         ebp  

01021500  ret          

发现,传入的依然是变量的地址,再加上网上的一些资料,可以知道:传引用就是在传地址,只不过在操作上边有别于指针(指针是一块地址,引用是这块地址的数据)

感谢我的老师

感谢我的小秀秀

感谢我的朋友

很愿意和您交朋友:onlyformyxiuxiu@qq.com

原创粉丝点击