c语言——如何不创建临时变量实现两个变量的交换

在c语言编程中,我们经常会对两个变量进行交换,一般我们都会采用创建第三个临时变量的方法进行交换,如下:

int t = 0;
	t = a;
	a = b;
	b = t;

那么是否可以不进行第三临时变量的创建来完成两个变量的交换呢?曾有一道面试题就考到了这个。下面介绍两种方法,各有优劣。

1、通过两个数互相加减来完成

假如仍对啊a,b进行交换,我们可以先将a与b的值相加,得到的和赋值给a,再由a+b的总和即现在的a减去b的值就得到了a的值再将这个值赋给b,这时b里面装的就是a的值了,再由a+b的总和,即a现在的值减去b(现在装着a的值),就得到了b的值,再赋给a,就完成了a与b两个变量的交换。如下:

a = a + b;
b = a - b;
a = a - b;

除了先得到和,同理,也可以先进行相减,得到差值,如下:

b = a - b;
a = a - b;
b = a + b;

但是这种方法存在缺陷,那就是第一步相加(或相减)后得到的值可能超出定义类型的范围。

2、通过异或进行交换

异或的运算是在二进制的条件下完成的,异或的符号是:^,运算法则是:相同为0,相异为1举个例子:

这里我们进行探究就可以发现:

将4 ^ 3 ^ 4交换顺序得到:4 ^ 4 ^ 3=3,可知异或满足交换律。
有了这个发现,我们便能完成不创建临时变量来实现两个变量的交换了,如下:

#include<stdio.h>
int main()
{
	int a, b;
	scanf("%d%d", &a, &b);//输入:4 3
	a = a ^ b;
	b = a ^ b;//这里相当于b = a ^ b ^ b = a(将上面a的值带入得到)
	a = a ^ b;//这里相当于a = a ^ b ^ a = b(等号后面的a为a ^ b,b为a)
	printf("%d %d", a, b);//输出:3 4
	return 0;
}

这种方法也具有缺点:
1、只能用于整数交换
2、代码的可读性差
3、代码执行的效率也低于使用临时变量的方法

3、总结

这两种方法相较于使用临时变量的方法都具有一定的局限性,除了有这种特殊要求的情况下,我们一般还是采用临时变量的方法来进行两个变量的交换。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值