在面试题中会看到这样的代码:
int a = 1; 或 int a = 1;
int b = 2; int b = 2;
a ^ = b; a = a+b;
b^ =a; b = a-b;
a^ =b; a = a-b;
很明显,上面代码起到了交换两个数的作用,但却存在着陷阱,假设你交换的两个数其实是同一个数,即:
swap(a,a);
会出现这样:
int a=1;
a ^=a; a^=a; a^ =a; // a = 0;
int a = 1;
a = a+a; a=a-a; a= a-a; // a = 0;
我们是很少会写出swap(a,a),更多的时候在数组中没有加以控制。如果想像 上面那么用 ,首先判断两个数指向 的是不是同一个地址.