对两个数交换,常见的写法是基于中间变量:
指名写法:
void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
引用写法:
void swap(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
然后就有人想出不使用中间变量的方法:
1.使用加减法
void swap(int *a,int *b)
{
*a=*a+*b;
*b=*a-*b;
*a=*a-*b;
}
加减法的问题在于:会带来溢出的可能
还有乘除除的交换方法,更容易溢出了
2.使用异或void swap(int *a,int *b)
{
*a=*a^*b;
*b=*a^*b;
*a=*a^*b;
}
异或看上去很酷,但问题在于:
当两个变量地址一致(或引用同一对象)时会得到0的结果