传值、传引用、传指针函数调用的区别

原创 2013年12月02日 21:10:30
void SwapByValue(int a,int b)
{
00311490  push        ebp  //设基值
00311491  mov         ebp,esp  
00311493  sub         esp,0CCh  
00311499  push        ebx  
0031149A  push        esi  
0031149B  push        edi  //源/目标索引寄存器
0031149C  lea         edi,[ebp-0CCh]  
003114A2  mov         ecx,33h  
003114A7  mov         eax,0CCCCCCCCh  
003114AC  rep stos    dword ptr es:[edi]  
	int temp;
	temp = a;
003114AE  mov         eax,dword ptr [a]  
003114B1  mov         dword ptr [temp],eax  
	a = b;
003114B4  mov         eax,dword ptr [b]  
003114B7  mov         dword ptr [a],eax  
	b = temp;
003114BA  mov         eax,dword ptr [temp]  
003114BD  mov         dword ptr [b],eax  

}
003114C0  pop         edi  
003114C1  pop         esi  
003114C2  pop         ebx  
003114C3  mov         esp,ebp  
003114C5  pop         ebp  
003114C6  ret  
void SwapByRef(int& a,int& b)
{
00311440  push        ebp  
00311441  mov         ebp,esp  
00311443  sub         esp,0CCh  
00311449  push        ebx  
0031144A  push        esi  
0031144B  push        edi  
0031144C  lea         edi,[ebp-0CCh]  
00311452  mov         ecx,33h  
00311457  mov         eax,0CCCCCCCCh  
0031145C  rep stos    dword ptr es:[edi]  
	int temp;
	temp = a;
0031145E  mov         eax,dword ptr [a]  
00311461  mov         ecx,dword ptr [eax]  
00311463  mov         dword ptr [temp],ecx  
	a = b;
00311466  mov         eax,dword ptr [a]  
00311469  mov         ecx,dword ptr [b]  
0031146C  mov         edx,dword ptr [ecx]  
0031146E  mov         dword ptr [eax],edx  
	b = temp;
00311470  mov         eax,dword ptr [b]  
00311473  mov         ecx,dword ptr [temp]  
00311476  mov         dword ptr [eax],ecx  
}
00311478  pop         edi  
00311479  pop         esi  
0031147A  pop         ebx  
0031147B  mov         esp,ebp  
0031147D  pop         ebp  
0031147E  ret  
void SwapByPointer(int* a, int* b)
{
003113E0  push        ebp  
003113E1  mov         ebp,esp  
003113E3  sub         esp,0CCh  
003113E9  push        ebx  
003113EA  push        esi  
003113EB  push        edi  
003113EC  lea         edi,[ebp-0CCh]  
003113F2  mov         ecx,33h  
003113F7  mov         eax,0CCCCCCCCh  
003113FC  rep stos    dword ptr es:[edi]  
	int* temp = NULL;
003113FE  mov         dword ptr [temp],0  
	*temp = *a;
00311405  mov         eax,dword ptr [temp]  
00311408  mov         ecx,dword ptr [a]  
0031140B  mov         edx,dword ptr [ecx]  
0031140D  mov         dword ptr [eax],edx  
	*a = *b;
0031140F  mov         eax,dword ptr [a]  
	*a = *b;
00311412  mov         ecx,dword ptr [b]  
00311415  mov         edx,dword ptr [ecx]  
00311417  mov         dword ptr [eax],edx  
	*b = *temp;
00311419  mov         eax,dword ptr [b]  
0031141C  mov         ecx,dword ptr [temp]  
0031141F  mov         edx,dword ptr [ecx]  
00311421  mov         dword ptr [eax],edx  
}
00311423  pop         edi  
00311424  pop         esi  
00311425  pop         ebx  
00311426  mov         esp,ebp  
00311428  pop         ebp  
00311429  ret  

函数调用三种方式:传值&传引用&传指针

相关概念 c++三种传递参数方式 传参数的值(称值传递,简称传值),传参数的地址(称地址传递,简称为传址),和引用传递(称为传引用),相应的函数传值调用,传址调用和传引用调...

Java 函数调用是传值还是传引用? 从字节码角度来看看!

本文是网友KailunTalk文章的精简版, 他从字节码的角度解释了Java 函数调用中传递参数的方式, 充分体现了一个程序员深度挖掘,了解底层的精神, 原文地址:https://my.oschina...

Python函数调用“传引用”还是”传值“

【结论】  结论:python不允许程序员选择采用传值还是传引用。Python参数传递采用的肯定是“传对象引用”的方式。这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者...

函数调用传值、传地址与引用的选择

从函数调用的角度理解三者之间的区别  传值:      函数参数压栈的是参数的副本。      任何的修改是在副本上作用,没有作用在原来的变量上。     传指针:      压栈的是指针变量的副本。...

C语言函数调用三种方式:传值调用,引用调用和传地址调用

C语言函数调用三种方式:传值调用,引用调用和传地址调用

C语言函数调用三种方式:传值调用,引用调用和传地址调用

我想,你只要看了C语言上关于传值函数调用的测试题,一切都会了然于胸: 1. 考题一:程序代码如下: void Exchg1(int x, int y)  { int tmp; tmp=x; ...

C语言函数调用三种方式:传值调用,引用调用和传地址调用

我想,你只要看了C语言上关于传值函数调用的测试题,一切都会了然于胸: 1. 考题一:程序代码如下:void Exchg1(int x, int y) {int tmp;tmp=x;x=y;y=tmp;...

C语言中函数调用中的传值与传址

首先介绍一下函数中传值与传址的概念: 传值:传值,实际是把实参的值赋值给行参,相当于copy。那么对行参的修改,不会影响实参的值 。 传址: 实际是传值的一种特殊方式,只是他传递的是地址,不是普通...

传值,传指针和传引用区别和联系

C++写了很多年,有一天,写着写着代码。竟然自己发现对传值,传指针,传引用这个每天都在用的传递方式的区别还不是很清楚。以为自己懂了,其实还理解得还不够深入,基础还需要花时间琢磨。今天参考了很多篇博客和...

C++学习笔记(1)之传值、传指针、传引用的区别

1.引用和指针的区别:引用定义就要初始化、引用初始化后不能引用其他的引用、不能给引用赋空值,引用具有 1)不占空间  2)效率 3)安全优点 2.什么时候使用指针,什么时候又该使用引用? 指针和引...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:传值、传引用、传指针函数调用的区别
举报原因:
原因补充:

(最多只允许输入30个字)