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);

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

总结:

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

谢谢铁子们~

相关推荐
纵有疾風起8 小时前
C++——类和对象(3)
开发语言·c++·经验分享·开源
Full Stack Developme8 小时前
java.text 包详解
java·开发语言·python
文火冰糖的硅基工坊9 小时前
[嵌入式系统-135]:主流AIOT智能体开发板
开发语言·嵌入式·cpu
承渊政道10 小时前
动态内存管理
c语言·c++·经验分享·c#·visual studio
yudiandian201410 小时前
02 Oracle JDK 下载及配置(解压缩版)
java·开发语言
要加油哦~10 小时前
JS | 知识点总结 - 原型链
开发语言·javascript·原型模式
鄃鳕10 小时前
python迭代器解包【python】
开发语言·python
new coder10 小时前
[c++语法学习]Day10:c++引用
开发语言·c++·学习
驰羽10 小时前
[GO]GORM 常用 Tag 速查手册
开发语言·后端·golang
Narcissiffo10 小时前
【C语言】str系列函数
c语言·开发语言