交换两个变量的值:
1、main函数内交换
1.1、引用中间变量
思路:假设:a=10,b=20 我们想要交换a与b的值,
可以借助一个中间变量temp,把a的值附给temp,把b的值给a,再把temp的值给b,就完成了交换。
代码:
#include <stdio.h>
int main(int argc, const char * argv[]) {
int a = 23, b = 35;
int temp = 0;
printf("a = %d, b = %d\n", a, b);
temp = a;
a = b;
b = temp;
printf("a = %d, b = %d\n", a, b);
return 0;
}
1.2、利用数学加减法进行交换
思路:A=A+B;B=A-B;A=A-B;
方法缺陷:是只能用于数字类型,字符串之类的就不可以了。a+b有可能溢出不安全(不推荐)。
代码:
#include <stdio.h>
int main(int argc, const char * argv[]) {
int a = 23, b = 35;
printf("a = %d, b = %d\n", a, b);
a = a + b;
b = a - b;
a = a - b;
printf("a = %d, b = %d\n", a, b);
return 0;
}
1.3、利用位异或运算来实现交换
思路:利用一个数异或本身等于0和异或运算符合交换率
优点:这种方法是效率最高的一种,
代码:
#include <stdio.h>
int main(int argc, const char * argv[]) {
int a = 23, b = 35;
printf("a = %d, b = %d\n", a, b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a = %d, b = %d\n", a, b);
return 0;
}
2、函数调用
编写函数实现两个变量的交换我们首先想到的就是将a,b两个值传过去,用上面任意一个方法实现交换
所以就有如下代码:
#include <stdio.h>
void swap(int a, int b)
{
int temp = 0;
temp = a;
a = b;
b = temp;
}
int main(int argc, const char * argv[]) {
int a = 23, b = 35;
printf("交换前:a = %d, b = %d\n", a, b);
swap(a, b);
printf("交换后:a = %d, b = %d\n", a, b);
return 0;
}
编译之后我们会发现:
这样根本没有发生交换,这是因为我们在swap(int a, int b)中交换的a,b只是我们真正需要交换的a,b的一份拷贝,而真正的a,b并没有发生交换,所以为了真正达到交换的目的:
我们必须给函数传递需要交换的值得地址, 这样函数便可以通过这个地址找出要交换的值(也就是址传递)。
修改后代码为:
#include <stdio.h>
void swap(int *a, int *b)
{
int temp = 0;
temp = *a;
*a = *b;
*b = temp;
}
int main(int argc, const char * argv[]) {
int a = 23, b = 35;
printf("交换前:a = %d, b = %d\n", a, b);
swap(&a, &b);
printf("交换后:a = %d, b = %d\n", a, b);
return 0;
}
编译后的结果为: