搜索
查看: 769|回复: 0

第十二节:两个变量的数据交换。

[复制链接]

52

主题

146

帖子

380

积分

中级会员

Rank: 3Rank: 3

积分
380
发表于 2015-7-16 13:32:41 | 显示全部楼层 |阅读模式
为了加深理解赋值语句的一个重要特性“覆盖性”,本节利用赋值语句“=”做一个实验。要求把变量a与b的两个数据进行交换,假设a原来的数据是1,b原来的数据是5,交换数据后,a的数据应该变为5,b的数据应该变为1。

很多初学者刚看到这么简单的题目,会想当然的根据我们日常生活的思路,你把你的东西给我,我把我的东西给你,就两个步骤,so easy!请直接复制

第十节的模板程序,仅修改main函数后,main函数源代码如下:

  • void main() //主程序
  • {
  • /*---C语言学习区域的开始---------------------------------------------------------------------------*/
  •   unsigned char a=1;   //定义一个变量a,并且分配了一个字节的RAM空间,里面保存的数据被初始化成1.
  •   unsigned char b=5;   //定义一个变量b,并且分配了一个字节的RAM空间,里面保存的数据被初始化成5.
  •         b=a; //第一步:为了交换,先把a的数赋值给b。
  •         a=b; //第二步:为了交换,再把b的数赋值给a。
  •   GuiWdData0=a;   //把变量a这个数值放到窗口变量0里面显示
  •   GuiWdData1=b;   //把变量b这个数值放到窗口变量1里面显示
  • /*---C语言学习区域的结束---------------------------------------------------------------------------*/
  •    while(1)
  •    {
  •       initial();
  •       key_service();
  •       display_service();
  •    }
  • }


复制代码

       上坚鸿51学习板观察程序执行的结果:
       变量a的数值是1。
       变量b的数值是1。
     上述实验结果并没有达到交换数据的目的,为什么?因为赋值语句有一个重要的特性,就是覆盖性。分析如下:
         b=a; //第一步
     分析点评:执行第一步后,此时虽然b得到了a的数据1,但是b原来自己的数据5已经被覆盖丢失了!
         a=b; //第二步
     分析点评:由于b的数据在执行第一步后变成了1,执行第二步后,此时相当于把1赋值给a,并没有5!所以a和b的数据都是1,不能达到交换后“a为5,b为1”的目的。
     上述交换数据的程序宣告失败!怎么办?既然赋值语句具有覆盖性,那么两变量想交换数据,就必须借助第三方寄存,此时只需要多定义一个第三方变量t。main函数源代码如下:

  • void main() //主程序
  • {
  • /*---C语言学习区域的开始---------------------------------------------------------------------------*/
  •   unsigned char a=1;   //定义一个变量a,并且分配了一个字节的RAM空间,里面保存的数据被初始化成1.
  •   unsigned char b=5;   //定义一个变量b,并且分配了一个字节的RAM空间,里面保存的数据被初始化成5.
  •   unsigned char t;     //定义一个变量t,并且分配了一个字节的RAM空间,里面默认是什么数据不重要。
  •         t=b; //第一步:为了避免b的数据在执行第二步后被覆盖丢失,先把b的数据寄存在第三方变量t那里。
  •         b=a; //第二步:把a的数赋值给b,b原来的数据虽然被覆盖丢失,但是b在t变量那里有备份,再也不用担心了。
  •         a=t; //第三步:由于此时b已经获得了a的数据,如果想交换,此时只能把b在t变量里的备份赋值给a,而不能用b。
  •   GuiWdData0=a;   //把变量a这个数值放到窗口变量0里面显示
  •   GuiWdData1=b;   //把变量b这个数值放到窗口变量1里面显示
  • /*---C语言学习区域的结束---------------------------------------------------------------------------*/
  •    while(1)
  •    {
  •       initial();
  •       key_service();
  •       display_service();
  •    }
  • }

复制代码

       上51学习板观察程序执行的结果:
       变量a的数值是5。
       变量b的数值是1。
      交换成功!

       下节预告:二进制与字节单位。

回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /2 下一条

Archiver|手机版|小黑屋|RF技术社区

GMT+8, 2024-3-29 22:50 , Processed in 0.077282 second(s), 6 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表