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

原创 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语言中所有传递给函数的参数
  • a15994269853
  • a15994269853
  • 2014年04月18日 09:50
  • 10816

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

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

C/C++的值传递,指针传值和引用传值的区别

首先让我们来看下面几个代码:
  • zhushh
  • zhushh
  • 2014年11月03日 12:07
  • 2036

C++中传值、传址与传引用的区别

1、参数传递的概念  所谓参数传递就是用函数调用所给出的实参(实际参数)向函数定义所给出的形参(形式参数)设置初始值的过程。 在c++中,调用函数时有三种参数传递方式,分别为: (1)传值调用;...
  • Silence723
  • Silence723
  • 2016年07月19日 10:07
  • 1428

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

相关概念 c++三种传递参数方式 传参数的值(称值传递,简称传值),传参数的地址(称地址传递,简称为传址),和引用传递(称为传引用),相应的函数传值调用,传址调用和传引用调...
  • smallgyy
  • smallgyy
  • 2012年12月01日 19:32
  • 1804

C++传值&传指针&传引用

我同学看见我的电脑都说我浏览器开太多了,忍不住要帮我关掉,但是宝宝一个窗口是写博客,一个窗口写javascript,一个窗口写算法,虽然每个都开了十几个,但是条理很清晰啊,没毛病!C++传参数的三种方...
  • tingyugetc11
  • tingyugetc11
  • 2017年03月23日 14:27
  • 465

C/C++语言函数参数传递:传值,传指针,传引用

前面我们介绍了函数的调用约定,明白了函数调用者与被调用者之间传递参数的顺序与如何进行栈恢复的。 实际上,函数调用者如何将参数传递给被调用者也是有讲究的。 总的来说,函数参数传递分为3种情况:传值,传指...
  • u012713968
  • u012713968
  • 2016年01月08日 14:50
  • 531

C++ 传值,传引用和传指针-参考Effective C++ 第三版Item20~21

拷贝构造函数 copy construtor  为什么有copy construtor? 函数的传参数有三种方式:传值,传引用和传指针。传值会产生对象的副本,而后两者是传的是对象的别名和对象的指针。...
  • dannyPolyu
  • dannyPolyu
  • 2013年09月12日 15:24
  • 765

值传递,指针传递 ,引用传递的总结

C++中值传递、指针传递、引用传递的总结 收藏  1. 值传递:形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传...
  • sjpz0124
  • sjpz0124
  • 2015年07月24日 10:08
  • 874

传值、传引用、传值

一、 函数参数传递机制的基本理论   函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题。基本的参数传递机制有两种:值传递和引用传递。以下讨论称调用...
  • azhexg
  • azhexg
  • 2013年07月12日 15:20
  • 9402
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:传值、传引用、传指针函数调用的区别
举报原因:
原因补充:

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