C语言4种实现两变量值互换的方法

(一)创建临时变量

首先最直观最简单实现两变量值互换的方法是创建临时变量,把其中一个值放在临时变量中去,最后再放回来。

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int c = 0;//创建临时变量c,用于存放a,b中的一个值
	scanf("%d%d", &a, &b);
	c = a;//把a赋值给c
	a = b;//将b赋值给a,此时a的值已经被覆盖,但我们有保存a的值的临时变量c
	b = c;//最后将c赋值给b,其实也就是原本的a赋值给b。这是方法一
	printf("%d %d\n", a, b);
	return 0;
}

(二)运用位运算符^

按位异或的特点是一个数按位异或自己为零,一个数按位异或零还为自己。即a^0==a,a^a==0。我们可以利用这个特点来进行变量值的互换

define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int c = 0;//创建临时变量c,用于存放a,b中的一个值
	scanf("%d%d", &a, &b);
	//方法二
	a = a ^ b;
	b = a ^ b;//此时b==a^b^b。 其中b^b==0    然后0^a ==a;
	a = b ^ a;//同样的道理a=a^b^a  其中a^a==0  然后0^b==a
	printf("%d %d\n", a, b);
	return 0;
}

(三)不使用临时变量的加减法

与方法二一样的原理,利用加减法的运算

define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int c = 0;//创建临时变量c,用于存放a,b中的一个值
	scanf("%d%d", &a, &b);
	//方法三
	a = a + b;
	b = a - b;//b = a+b-b 此时b==a
	a = a - b;//a== a + b- (a+b-b)
	printf("%d %d", a, b);
	return 0;
}

(四)通过子函数运用地址

主函数传参数并不是把实际的值,即实参,传到子函数去。而是相当于复制粘贴,赋给了新的一模一样的值,即形参。这两个值的地址并不相同。所以一般如果不用地址,我们难以修改主函数的变量的值。

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void Change_number(int* pa,int* pb)
{
	int c = 0;
	c = *(pa);//解引用pa的地址,将pa指向的值a赋值给c
	*(pa) = *(pb);//跟方法一同理,解引用pb的地址,将pb指向的值b赋值a
	*(pb) = c;//最后再将存在a的值的c赋值给b
}
int main()
{
	int a = 0;
	int b = 0;
	int c = 0;//创建临时变量c,用于存放a,b中的一个值
	scanf("%d%d", &a, &b);
	//方法四
	Change_number(&a, &b);
	printf("%d %d", a, b);//然后打印a,b的值
	return 0;
}
(五)作者想说的话

建议多多思考这四个方法的原理,由来。然后自己动手敲一遍代码,这样才算学会。我是しかし,我们下次再见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值