在不使用第三个变量的情况下,实现a,b两个数的交换

(1)法一:使用加法
a += b; b = a - b; a = a-b;

void Swap1(int *p1,int *p2)
 {
  *p1+=*p2;
  *p2=*p1-*p2;
  *p1=*p1-*p2;
 }

(2)法二:使用减法
a=a-b; b=a+b; a=b-a;

 void Swap2(int *p1,int *p2)
 {
  *p1=*p1-*p2;
  *p2=*p1+*p2;
  *p1=*p2-*p1;
 }

(3)进行异或
a =a^ b; b=a^ b; a = a^b;

 void Swap2(int *p1,int *p2)
 {
  *p1=*p1^*p2;
  *p2=*p1^*p2;
  *p1=*p1^*p2;
 }

以上三种方法可以在不使用第三个变量的情况下实现两个数的交换,但有溢出风险。
进行两个数的交换,最好还是使用第三个变量。即:

 void Swap(int *p1,int *p2) 
 {
  int tmp;
  tmp=*p1;
  *p1=*p2;
  *p2=tmp;
 }
 int main()
{
 int a=20;
 int b=15;
 Swap(&a,&b);
 printf("%d,%d\n",a,b);
}

版权声明:本文为kimEHEH原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。