编写一个 Swap 函数,能够实现两个变量值的交换,通常我们需要借助第三方变量来进行实现
一、C 语言中 Swap
void Swap(int a, int b)
{
int tmp = a; //借助 tmp 来实现交换
a = b;
b = tmp;
}
int main()
{
int a = 10;
int b = 20;
printf("a = %d b = %d\n", a, b);
Swap(a, b);
printf("a = %d b = %d\n", a, b);
return 0;
}
但实际上的执行结果是:
可以发现并没有实现变量的交换,这是因为 Swap 函数中传入的是 a,b 的形参,也即a,b的一份拷贝是一个新的变量空间,更直观的观察: 观察地址空间会发现: a,b与x,y对应的地址空间不同,说明x,y是a,b的一份临时拷贝,是一对新的变量,在swap函数调用时创建,调用结束释放
二、Swap 函数的实现
方法一:指针交换:交换的是a,b对应空间内的值
void Swap(int *a,int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
int main()
{
int a = 10;
int b = 20;
printf("a = %d b = %d\n", a, b);
Swap(&a, &b); //传址
printf("a = %d b = %d\n", a, b);
return 0;
}
实现结果:
方法二、加减实现
#include<iostream>
void Swap(int &x,int &y)
{
int tmp = x + y;
x = tmp - x;
y = tmp - y;
}
int main()
{
int a = 10;
int b = 20;
printf("a = %d b = %d\n", a, b);
Swap(a, b);
printf("a = %d b = %d\n", a, b);
return 0;
}
方法三:引用类型
#include<iostream>
void Swap(int &x,int &y)
{
int tmp = x ;
x = y;
y = tmp;
}
引用变量x,y与a,b指向同一地址空间:
方法四:异或实现
异或:二进制位进行异或操作,表明相异结果为1 ,相同结果为0 例如:0011 1110 ^ __________________ 1101
#include<iostream>
void Swap(int &a, int &b)
{
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
Tips: 欢迎志同道合的学友们评论~~
|