C语言中如何交换两个变量的值

在C语言中,经常需要交换两个变量的值,那么如何去交换两个变量的值呢?方法其实是很多的。大体分为两个方面,不使用指针改变,和使用指针在自定义函数中改变。
不使用指针
这种情况在交换函数内两个局部变量的值,或者交换两个全局变量的值最为适用。

第一种是最为常用的,用第三个变量存储变量被修改之前的值。

#include <stdio.h>
int main()
{
	int a=10, b=5, tmp=0;
	tmp=a;
	a=b;
	b=tmp;

	return 0;
}

第二种就少见了,不需要使用第三个变量。

#include <stdio.h>
int main()
{
	int a=10, b=5;
	a=a+b;	//这里a的值是a+b
	b=a-b;	//这里b的值是(a+b)-b=a
	a=a-b;	//这里a的值是(a+b)-a=b

	return 0;
}

第三种和第二种异曲同工,但是使用了位运算符。

#include <stdio.h>
int main()
{
	int a=10, b=5;
	a=a^b;	//这里a的值是a^b
	b=a^b;	//这里b的值是(a^b)^b=a^(b^b)=a^0=a
	a=a^b;	//这里a的值是(a^b)^a=b^(a^a)=b^0=b

	return 0;
}

使用指针
使用指针都是为了在函数内部访问函数外的局部变量,这里先说两种错误的方法,然后再说两种正确的方法。

第一种,最为常见的错误,没有理解实参和形参的区别。指针变量也是形参,交换形参指针的值,只是交换了形参指针的指向,并没有对其指向的内存做修改。

void swap1(int *pa,int *pb)
{
	int *pt;
	pt = pa;
	pa = pb;
	pb = pt;
}

第二种,避开了没有对内存做修改的错误,但是在运行过程中几乎都会报错。

void swap2(int *pa,int *pb)
{
	int *pt;	//这里定义一个pt指针,
	//想用它指向的内存去存储变量修改前的值,
	//但是对于一个没有初始化的指针(指针变量的值是随机的,即野指针),
	//去访问它指向的内存是相当危险的,
	//我们无法知道它指向的内存是否有权限去访问,
	//以及访问过后是否会使程序崩溃,所以绝大多数情况下会出错。
	*pt = *pa;
	*pa = *pb;
	*pb = *pt;
}

第三种是正确的方法,也是最常用的。

void swap3(int *pa,int *pb)
{
	int t = 0;
	t = *pa;
	*pa = *pb;
	*pb = t;
}

第四种是正确的方法,是使用前面所说的位运算的方法,你也可以使用加法的方法。

void swap4(int *pa,int *pb)
{
	*pa ^= *pb;
	*pb ^= *pa;
	*pa ^= *Pb;
}

写的可能不够好哈(- _ -)

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值