设为首页 加入收藏

TOP

从“交换两个变量而不用临时变量”谈起
2014-11-23 20:14:57 】 浏览:3337
Tags:交换 两个 变量 不用 临时 谈起

  问题:写一个函数,实现交换两个变量,但不能用临时变量?


  分析:交换两个变量的这一功能,我们用的比较多,也可以很容易的写出一个出来,但是题目要求的是不能用临时变量。并且题目也没有说明变量是什么类型,它是 int,char,double,还是自定义的结构体,或者是类类型,虽然可以用模板从某种程度上解决这一些问题,但对于自定义的类型,还是不是很好处理。在这里先从最简单的说起,假设这里的变量是int型的。


  一般如果我们要写一个交换整形变量的代码是


  1: inline void Swap(int *a,int *b)


  2: {


  3: int temp;


  4: temp=*a;


  5: *a=*b;


  6: *b=*a;


  7: }


  我们用到了临时变量temp。


  思考一个问题我们为什么要用到临时变量呢?我们平常交换东西时,是否用到了临时的媒介呢?


  比方说我手上有一个苹果,你手上有一个桔子,我想和你交换,是如何进行的,用到媒介没有呢?我们好像是直接交换的,这其中似乎没有用到什么媒介,但是仔细想想过程是用到了媒介的。交换可以归纳为两种方法,1:将物品直接从一个人的左手放到一个人的右手2:借助其它的容器,如果盘,先将物品放在果盘中,再去拿自己要的。其实这两个也只是一个方法而已,第一个借助的“容器”是我们的身上的另一只空闲的手,很容易忽略掉这个问题,以为我们没有用到其它媒介,要是想想我们只有一只手如何交换呢。


  结论1:物质是有载体的,不管这物质是实体的,还是虚体。一个载体在同一时间上只能承载一种物质,于是在交换两个载体承载的物质时,是不可能同时进行的,估都要用到其它的媒介载体。回到计算机的问题上,存放变量也有载体的,它是内存,而变量可以说是一种虚体物质。这从直观上解释一般为什么我们写交换变量函数时要用到临时变量,也直接反映了编程不是离生活很远的,它不是另一个世界的思维。


  即然如此,是不是没有办法了?方法只给那些勤于思考的人的。是一定要用到载体媒介吗?不用到就不行吗?


  结合程序设计特点,可以有如下的代码


  1: inline void Swap(int *a,int *b)


  2: {


  3: *a=*a+*b;


  4: *b=*a-*b;


  5: *a=*a-*b;


  6: }


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇用extern声明外部变量 下一篇获取当前系统所有进程

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目