写出的用堆栈实现变量交换为何达不到预期效果,该如何处理
写出的用堆栈实现变量交换为何达不到预期效果C/C++ codevoid swap(int &a ,int &b){__asm{push apush bp
写出的用堆栈实现变量交换为何达不到预期效果
C/C++ codevoid swap(int &a ,int &b){ __asm { push a; push b; pop a; pop b; } }
在主函数里调用该函数后输出,变量没有交换
如果把以下代码直接写入主函数,则交换成功
C/C++ code __asm { push a; push b; pop a; pop b; }
是哪里搞错了?
[解决办法]所谓引用就是const指针
以引用作为函数参数,实际上相当于指针传递,内部push和pop只是改变函数当中的指针指向的地址,对于外部调用的指针则还是指向原来的地址,因此外部没改变。
[解决办法]void swap(int &a ,int &b)
{
__asm
{
mov eax,a
mov ecx,b
push dword ptr[eax]
push dword ptr[ecx]
pop dword ptr[eax]
pop dword ptr[ecx]
}
cout<<"函数内:"<<a<<b<<endl;
}
int main()
{
int a=1,b=2;
swap(a,b);
cout<<"函数外:"<<a<<b<<endl;
return 0;
}