用函数实现交换两个整数的三种方法

用函数实现交换两个数的三种方法

我们假设两个数分别为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
}
//

推荐使用方法一和方法三。

经验分享 程序员 微信小程序 职场和发展