您的位置:首页 > 编程语言 > C语言/C++

C语言交换两个变量的值

2017-04-25 16:04 721 查看
交换两个变量的值:

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;
}
编译后的结果为:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: