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

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  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值