1、借助中间变量
#include<stdio.h>
int swap1();
int main()
{
int a,b;
printf("请输入两个数:");
scanf("%d %d",&a,&b);
swap1(&a,&b);
printf("%d %d\n",a,b);
}
int swap1( int *pa,int *pb)
{
int t;
t = *pa;
*pa = *pb;
*pb = t;
return 0;
}
注:传值与传址的区别
2、无需中间变量
#include<stdio.h>
int main()
{
int i,j;
printf("请输入两个数i,j\n");
scanf("%d %d",&i,&j);
i = i + j;
j = i - j;
i = i - j;
printf("i=%d j=%d \n",i,j);
}
:加法或者乘会造成溢出
3、解决溢出情况且无中间变量
按位异或:即两个二进制数相同为0;不同为1
#include<stdio.h>
int main()
{
int a;
int b;
int t;
printf("请输入两个数:");
scanf("%d %d",&a,&b);
t = a^b;
a = t^a;
b = t^b;
printf("%d %d",a,b);
return 0;
}