假设要交换a和b的值。
第一种方法:a=a+b;
b=a-b;
a=a-b;
相应代码如下:
#include<stdio.h>
void swap(int *a,int*b){
*a=*a+*b;
*b=*a-*b;
*a=*a-*b;
}
int main(){
int a,b;
int *p1,*p2;
scanf("%d %d",&a,&b);
p1=&a;
p2=&b;
swap(p1,p2);
printf("a=%d,b=%d\n",*p1,*p2);
return 0;
}
这种方法有个弊端:容易越界,假设a和b都是32位数据,那么a=a+b就可能超过32位;
第二种方法:
a^a=0;
a^0=a;
a=a^b;
b=a^b(=a^b^b=a^0=a);
a=a^b(=a^b^a=a^a^b=0^b=b);
相应代码如下:
#include<stdio.h>
void swap(int *a,int*b){
if(*a==*b)return;
*a=*a^*b;
*b=*a^*b;
*a=*a^*b;
}
int main(){
int a,b;
int *p1,*p2;
scanf("%d %d",&a,&b);
p1=&a;
p2=&b;
swap(p1,p2);
printf("a=%d,b=%d\n",*p1,*p2);
return 0;
}
这种方法对于a=b时,不适用