关闭

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

352人阅读 评论(0) 收藏 举报
分类:
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  

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:21789次
    • 积分:448
    • 等级:
    • 排名:千里之外
    • 原创:17篇
    • 转载:7篇
    • 译文:5篇
    • 评论:2条
    最新评论