最近突然想到以前看的交换两个整数的巧妙写法的限制条件忘了,所以就再看了一遍:
#include<iostream>
using namespace std;
int a[]={1,2,3,4};
void swap(int &a,int &b){
a=a^b;
b=a^b;
a=a^b;
}
int main(){
int m=1,n=2;
swap(m,n);
swap(a[1],a[1]);
cout<<m<<" "<<n<<endl;
for(int i=0;i<4;i++)
cout<<a[i]<<endl;
return 0;
}
输出结果为:
2 1
1
0
3
4
为什么a[1]编程0了呢?因为使用swap函数的时候,由于参数都是a[1],所以他们公用一块内存地址,当执行第一步a=a^b时,此时a和b已经全部是零了,第二步值都将变成1,第三步又都变成0了,最后的结果为0。所以说这个函数不能使用地址相同的这种。