传引用,到底传递的什么?
来源:互联网 发布:软件测试分享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。
- 传引用,到底传递的什么?
- 值传递和引用传递,java到底按什么传递的
- java中的值传递和引用传递到底有什么区别
- java中的值传递和引用传递到底有什么区别
- java中的值传递和引用传递到底有什么区别
- 引用到底在我们的背后做了什么?
- Java到底是按值传递还是引用传递?
- JAVA传参数到底是值传递还是引用
- Java参数传递:到底是传值还是传引用
- Java的参数传递到底是引用传递还是值传递
- 画重点,Java方法的参数到底是值传递还是引用传递?
- java方法传递参数传递的到底是什么?值调用:引用调用
- JS 参数传递到底是值传递还是引用传递?
- Java参数传递到底是值传递还是引用传递?
- ServerXMLHTTP到底传递什么身份标识?
- Java到底有没有引用传递?
- 到底是值传递还是引用,Java
- java到底是按值传递还是按引用传递?
- 打印机的端口设置
- windows下mysql5.1安装启动不成功的问题
- 【JQuery入门学习】——JQuery简介
- Spy++的使用方法
- gcc和g++,以及gdb的安装问题
- 传引用,到底传递的什么?
- 重读CLDC之二:类Reader、StreamReader、Helper和InputStreamReader
- Oracle以DBA方式登陆
- c# 进程间通讯 COPYDATA
- VB.NET(2005)中关于dll调用的错误信息(转)
- SQL Server各种日期计算方法
- ArcGIS几何网络分析—预告
- Func 委托 学习
- java.lang.OutOfMemoryError : Java heap space 及其处理