用函数实现交换两个整数的三种方法
用函数实现交换两个数的三种方法
我们假设两个数分别为x=10,y=20。 通过swap函数完成两个数的交换。
主函数
int main(){
int x = 10;
int y = 20;
swap(&x,&y);
printf("%d ,%d
",x,y);
return 0;
}
方法一
void Swap(int *xp,int *yp)
{
//*xp,*yp解引用
int temp = *xp;//*xp此时为右值,使用的是内容
*xp = *yp;//*xp此时为左值,使用的是空间
*yp = temp;
}
方法二
//加减法
void Swap(int *xp,int *yp){
*xp = *xp + *yp;
*yp = *xp - *yp;
*xp = *xp - *yp;
}
//此方法在两数字较大时,会产生溢出问题
方法三
我们首先需要知到:如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。任何数和0异或为它本身。(是将数字转为二进制,按照比特位进行相异为1,相同为0)
//利用异或进行交换
void Swap(int *xp,int *yp){
//等价于a=10,b=20
*xp ^= *yp;//等价于a^=b,则a=10^20,b=20
*yp ^= *xp;//等价于b^=a,则a=10^20,b=20^10^20=10
*xp ^= *yp;//等价于a^=b,则a=10^20^10=20,b=10
}
//
推荐使用方法一和方法三。
