首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-03-31 
写出的用堆栈实现变量交换为何达不到预期效果C/C++ codevoid swap(int &a ,int &b){__asm{push apush bp

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

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;
}

热点排行