1.基础方法
(1)运用中间变量
交换a与b的值,可以引入c,把a的值赋给c,把b值赋给a,再把c赋给b,这样就完成了交换。
int a = 2;
int b = 3;
int c; //引入中间变量
c=a;
a=b;
b=c;
(2)不使用中间变量
当不使用中间变量时,可以运用a与b本身或加或减完成交换,a+b再减去a是b,减去b是a,运用这个思想可以完成
a与b的交换
int a = 2;
int b = 3;
a = a + b;
b = a - b; //a+b—b
a = a - b; //a+b-a
同理我们也可以运用a-b+b=a,a-(a-b)=b 来交换
int a = 10;
int b = 89;
a = a - b;
b = a + b; //a-b+b=a
a = b - a; //a-(a-b)=b
这两种方法都有可能越界,但是后面减去数字后会越回来。
还有一种一般看不懂的方法,先把a与b转为2进制再异或
int a = 10;
int b = 89;
a = a^b;
b = a^b;
a = b^a;
2.函数指针
我们可以试着用函数交换一下
#include<stdio.h>
void Swap(int a,int b)
{
int c;
c = a;
a = b;
b = c;
}
int main()
{
int a = 2;
int b = 3;
Swap(a,b);
printf("%d,%d",a,b);
}
但是这个结果并没有交换成功
这是因为函数改变的只是它复制主函数的数据,它并没有改变主函数的数据,所以也不会成功交换。
想要交换就要使用数字的地址,必须用到指针
#include<stdio.h>
void Swap(int *a,int *b)
{
int c;
c = *a;
*a = *b;
*b = c;
}
int main()
{
int a = 2;
int b = 3;
Swap(&a,&b);
printf("%d,%d",a,b);
}
这样就交换成功了
以上就是我所知道的两个数交换