读书人

写出的用堆栈实现变量交换为何达不到预

发布时间: 2012-03-31 13:13:26 作者: rapoo

写出的用堆栈实现变量交换为何达不到预期效果

C/C++ code
void 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;
}

读书人网 >C++

热点推荐