交换两个变量的值常用方法
首先应当明确,当调用函数进行变量值交换时,应采用传址调用的方法,具体区别如下:
传值调用
函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。
传址调用
· 传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。
· 这种传参方式可以让函数和函数外边的变量建立起真正的联系,所以函数内部可以直接操作函数外部的变量。
所以交换调用函数交换两个变量的值时,采用传址传参。
首先定义两个变量并赋值,调用函数Swap来实现交换变量的值
int a = 2;
int b = 8;
Swap(&a, &b);
下面用三种方法实现
1.定义临时变量法
void Swap(int *p1, int *p2)
{
int temp = 0;
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
不足是用此方法会引入第三个变量
2.相加法
void Swap(int *p1,int *p2)
{
*p1 = *p1 + *p2;
*p2 = *p1 - *p2;
*p1 = *p1 - *p2;
}
当两个变量值较大时,用这个方法容易产生值溢出问题
3.异或法
void Swap(int * p1, int * p2)
{
*p1 = *p1 ^ *p2;
*p2 = *p1 ^ *p2;
*p1 = *p1 ^ *p2;
}
需要了解异或运算的原理:
x ^ x = 0
x ^ 0 = x
即任何数和本身异或值为0,任何数和0异或值为这个数本身。