如下,是一个利用内嵌汇编实现的两整数交换的程序。输出结果是2,1;2,1;1,2;2,1.可以看到Swap2这个函数行不通,在函数内两个变量确实交换了,但是调用后a和b没有交换,仍然是2,1。就像是传值一样,而没有传址,令我很困惑。
#include <cstdio>
void Swap1(int &_int1, int &_int2);
void Swap2(int &_int1, int &_int2);
int main() {
int a = 1, b = 2;
Swap1(a, b);
printf("%d,%d;", a, b);
Swap2(a, b);
printf("%d,%d.", a, b);
return 0;
}
void Swap1(int &_int1, int &_int2) {
unsigned c = _int1, d = _int2;
__asm {
mov ebx, [c];
xchg ebx, [d];
mov [c], ebx;
}
_int1 = c;
_int2 = d;
printf("%d,%d;", _int1, _int2);
}
void Swap2(int &_int1, int &_int2) {
__asm {
mov ebx, [_int1];
xchg ebx, [_int2];
mov [_int1], ebx;
}
printf("%d,%d;", _int1, _int2);
}
请各位朋友帮忙看看为什么会这样。