新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 第12節(jié):兩個變量的數(shù)據(jù)交換。

第12節(jié):兩個變量的數(shù)據(jù)交換。

作者: 時間:2016-11-22 來源:網絡 收藏
從業(yè)十年,教你單片機入門 第12講:

為了加深理解賦值語句的一個重要特性“覆蓋性”,本節(jié)利用賦值語句“=”做一個實驗。要求把變量a與b的兩個數(shù)據(jù)進行交換,假設a原來的數(shù)據(jù)是1,b原來的數(shù)據(jù)是5,交換數(shù)據(jù)后,a的數(shù)據(jù)應該變?yōu)?,b的數(shù)據(jù)應該變?yōu)?。

本文引用地址:http://m.butianyuan.cn/article/201611/319822.htm

很多初學者剛看到這么簡單的題目,會想當然的根據(jù)我們日常生活的思路,你把你的東西給我,我把我的東西給你,就兩個步驟,so easy!請直接復制第十節(jié)的模板程序,僅修改main函數(shù)后,main函數(shù)源代碼如下:

void main() //主程序

{

/*---C語言學習區(qū)域的開始---------------------------------------------------------------------------*/

unsigned char a=1; //定義一個變量a,并且分配了一個字節(jié)的RAM空間,里面保存的數(shù)據(jù)被初始化成1.

unsigned char b=5; //定義一個變量b,并且分配了一個字節(jié)的RAM空間,里面保存的數(shù)據(jù)被初始化成5.

b=a; //第一步:為了交換,先把a的數(shù)賦值給b。

a=b; //第二步:為了交換,再把b的數(shù)賦值給a。

GuiWdData0=a; //把變量a這個數(shù)值放到窗口變量0里面顯示

GuiWdData1=b; //把變量b這個數(shù)值放到窗口變量1里面顯示

/*---C語言學習區(qū)域的結束---------------------------------------------------------------------------*/

while(1)

{

initial();

key_service();

display_service();

}

}

復制代碼

上堅鴻51學習板觀察程序執(zhí)行的結果:

變量a的數(shù)值是1。

變量b的數(shù)值是1。

上述實驗結果并沒有達到交換數(shù)據(jù)的目的,為什么?因為賦值語句有一個重要的特性,就是覆蓋性。分析如下:

b=a; //第一步

分析點評:執(zhí)行第一步后,此時雖然b得到了a的數(shù)據(jù)1,但是b原來自己的數(shù)據(jù)5已經被覆蓋丟失了!

a=b; //第二步

分析點評:由于b的數(shù)據(jù)在執(zhí)行第一步后變成了1,執(zhí)行第二步后,此時相當于把1賦值給a,并沒有5!所以a和b的數(shù)據(jù)都是1,不能達到交換后“a為5,b為1”的目的。

上述交換數(shù)據(jù)的程序宣告失敗!怎么辦?既然賦值語句具有覆蓋性,那么兩變量想交換數(shù)據(jù),就必須借助第三方寄存,此時只需要多定義一個第三方變量t。main函數(shù)源代碼如下:

void main() //主程序

{

/*---C語言學習區(qū)域的開始---------------------------------------------------------------------------*/

unsigned char a=1; //定義一個變量a,并且分配了一個字節(jié)的RAM空間,里面保存的數(shù)據(jù)被初始化成1.

unsigned char b=5; //定義一個變量b,并且分配了一個字節(jié)的RAM空間,里面保存的數(shù)據(jù)被初始化成5.

unsigned char t; //定義一個變量t,并且分配了一個字節(jié)的RAM空間,里面默認是什么數(shù)據(jù)不重要。

t=b; //第一步:為了避免b的數(shù)據(jù)在執(zhí)行第二步后被覆蓋丟失,先把b的數(shù)據(jù)寄存在第三方變量t那里。

b=a; //第二步:把a的數(shù)賦值給b,b原來的數(shù)據(jù)雖然被覆蓋丟失,但是b在t變量那里有備份,再也不用擔心了。

a=t; //第三步:由于此時b已經獲得了a的數(shù)據(jù),如果想交換,此時只能把b在t變量里的備份賦值給a,而不能用b。

GuiWdData0=a; //把變量a這個數(shù)值放到窗口變量0里面顯示

GuiWdData1=b; //把變量b這個數(shù)值放到窗口變量1里面顯示

/*---C語言學習區(qū)域的結束---------------------------------------------------------------------------*/

while(1)

{

initial();

key_service();

display_service();

}

}

上堅鴻51學習板觀察程序執(zhí)行的結果:

變量a的數(shù)值是5。

變量b的數(shù)值是1。

交換成功!

下節(jié)預告:二進制與字節(jié)單位。



評論


技術專區(qū)

關閉