我输入了这些代码。然而,输出超出了我的预期。
#define SWAP(x,y) {x=x^y;y=x^y;x=x^y;}
#define SWAP2(x,y) {x=x+y;y=x-y;x=x-y;}
int main()
{
int ia[] = { 1, 10, 1 };
SWAP(ia[0], ia[0]); // the resutl is ia[0] = 0
SWAP(ia[1], ia[2]); // work fine
SWAP2(ia[1], ia[1]) // the result is ia[0] = 0
}
谁能帮帮我?任何帮助将不胜感激。
最佳答案
你的问题是你的交换算法要求这两个参数是独立的内存块。
正如 LYF_HKN 所指出的,每个算法的第一步都会导致 x
当 x=y
变为 0 .如果两者只是相等但仍然是不同的内存块,这很好,因为第二步将留下y
。不变(因为x
为0),第三步会恢复x
的原始值如果 y
现在等于那个原始值。
然而,当x
和 y
实际上是内存中的相同对象,然后是每个算法中的第一个操作,在设置x
为 0,也设置y
到 0,因为 y
是 x
.因此,每个算法的其余部分仅在该存储空间中保留值 0。
关于c++ - 奇怪的交换宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39554375/