C语言交换两个变量值的方法,详细讲解

不管在学习哪门语言,都会遇到交换两个变量的这种问题,而且在面试测试题中也经常提到。既然出现的频率这么高,那我们今天就来讲讲交换两个变量常用的几种方法。

今天主要是基于C语言写的代码,不管哪种语言写的,应该核心思想是一样的,只是代码的语法有差别仅此而已,我们不要为了写代码而写代码。

下面正式开始我们的主题:交换两个变量的值。

一、使用中间变量的情况下,交换两个变量。

这种方法的主要核心思想就是交换两个变量时,用一个中间变量作为桥梁。比如:有两杯不同颜色的水,我们要交换两个杯里面的水,是不是需要用到一个空杯来做转接的作用,不可能不借用其他工具,直接交换两杯水。所以我们围绕这个思想去写代码就很容易了。

下面代码展示:

objectivec 复制代码
int a = 10;
int b = 20;
int c = 0;   //中间变量,用于转接的作用
printf("交换前:a = %d, b = %d\n",a,b);
c = a;   //将a变量的值给变量c
a = b;  //将b变量的值给变量a
b = c;  //将c变量的值给变量b
printf("交换后:a = %d, b = %d\n", a, b);

这种方法是交换两个变量最常用也是最简单的方法。如果我们自己写逻辑代码需要交换两个变量就可以使用这种方法。

但是,,,,天理不饶人,面试中往往不给你出这么简单的题,他们题的要求就是不需要中间变量来做转接,直接交换两个变量的值,这样也挺好的,又节省了一个变量大小的空间,主打一个节省之王(哈哈哈哈哈)。为了铁子们在找工作的过程中,如果遇到这种题之后知道该如何面对,能快速写完代码。

二、不使用中间变量的情况下,交换两个变量。

来到了在找工作过程中,最容易出现的笔试题。这种题唯一的好处就是节省内存空间,看着牛逼一点点。如果是为了易于阅读的话,还是上面哪种方法更好。

不使用中间变量交换两个变量,在C语言中有三种方法可以实现,下面就来一一讲解,铁子们理解一种就欧克咯。

1、方法一

这种方法的核心思想就是对两个变量的二进制进行操作,对二进制进行一系列的运算之后,就能达到交换两个变量的值。

objectivec 复制代码
int a = 10;
int b = 20;
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);

为什么将两个变量异或来异或去,就可以交换两个变量的值呢,这主要是用到了异或这个操作符的特性,下面就画图给铁子们讲解一下。

2、方法二

这种方法的核心思想就是用两个变量的值进行加减的方法达到交换两个值的目的。

objectivec 复制代码
 int a = 10;
 int b = 20;
 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);

方法二还是比较简单的,这个不用画图大家也能懂。以后你们都是代码界的一把手。

总结:

我写这篇博客的意义是怕我的铁子们以后在找工作的过程中遇到这类题目了不知从何下手,因为我也经历过,当时第一反应就是使用中间变量交换两个变量,不知道还有其他不用中间变量就可以交换的方法。所以不想让我的铁子们去踩我踩过的坑。大家主要了解实现的思想,只要思想到位,代码不就唰唰唰的来了。

谢谢铁子们~

相关推荐
古月-一个C++方向的小白5 小时前
C++11之lambda表达式与包装器
开发语言·c++
沐知全栈开发5 小时前
Eclipse 生成 jar 包
开发语言
杭州杭州杭州6 小时前
Python笔记
开发语言·笔记·python
tanyongxi667 小时前
C++ AVL树实现详解:平衡二叉搜索树的原理与代码实现
开发语言·c++
棐木7 小时前
【C语言】动态内存管理
c语言·free·malloc·realloc·calloc·动态内存
阿葱(聪)8 小时前
java 在k8s中的部署流程
java·开发语言·docker·kubernetes
浮生带你学Java8 小时前
2025Java面试题及答案整理( 2025年 7 月最新版,持续更新)
java·开发语言·数据库·面试·职场和发展
斯是 陋室8 小时前
在CentOS7.9服务器上安装.NET 8.0 SDK
运维·服务器·开发语言·c++·c#·云计算·.net
李长渊哦9 小时前
深入理解Java中的Map.Entry接口
java·开发语言
koooo~9 小时前
JavaScript中的Window对象
开发语言·javascript·ecmascript