在学习用C语言交换两个整数的值得时候,有趣的发现了三种不同思路的解法。
整理大概如下:
</pre><pre name="code" class="cpp">#include <stdio.h>
void swap1(int *a, int *b);
void swap2(int *a, int *b);
void swap3(int *a, int *b);
int main(void)
{
int a = 10, b = 20;
printf("交换前:a = %d, b = %d\n",a,b);
a = 10, b = 20
swap1(&a, &b);
printf("swap1()执行后:a = %d, b = %d\n",a,b);
a = 10, b = 20
swap2(&a, &b);
printf("swap2()执行后:a = %d, b = %d\n",a,b);
a = 10, b = 20
swap3(&a, &b);
printf("swap3()执行后:a = %d, b = %d\n",a,b);
return 0;
}
//建立中间变量temp
void swap1(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
//利用加法
void swap2(int *a, int *b)
{
*a = *a + *b;
*b = *a - *b;
*a = *a - *b;
}
//利用异或运算
void swap3(int *a, int *b)
{
*a = *a ^ *b;
*b = *a ^ *b;
*a = *a ^ *b;
}
注意:swap1()和swap2()函数也可以交换float和double的值。其中swap2()函数还需考虑a+b是否值溢出
swap3()函数则只能对int型变量进行值得交换处理,没有值溢出的忧虑,但是可能当数很大时,效率较低。