新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 第12節:兩個變量的數據交換。

        第12節:兩個變量的數據交換。

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

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

        本文引用地址:http://www.104case.com/article/201611/319822.htm

        很多初學者剛看到這么簡單的題目,會想當然的根據我們日常生活的思路,你把你的東西給我,我把我的東西給你,就兩個步驟,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。

        交換成功!

        下節預告:二進制與字節單位。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 根河市| 托克逊县| 巴彦淖尔市| 邵东县| 梧州市| 托里县| 钦州市| 海南省| 民乐县| 商河县| 壤塘县| 江源县| 宁河县| 大连市| 平山县| 抚宁县| 广南县| 安宁市| 偃师市| 泰顺县| 垣曲县| 九龙城区| 额尔古纳市| 宣武区| 湟源县| 陆河县| 镇江市| 盐池县| 郧西县| 巴楚县| 忻州市| 平邑县| 宜兰县| 高淳县| 枣庄市| 壤塘县| 祥云县| 景谷| 阿克陶县| 柳河县| 霍山县|