<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        C語言關鍵字之“union”

        作者:啄木鳥   來源:啄木鳥   點擊數:  更新時間:2014年06月14日   【字體:
        union 關鍵字
        其一:在union的所有數據成員中,同一時間只能存儲一個數據成員。所有數據成員具有相同的地址,其空間的大小,以最大數據成員為準。eg:

        union StateMachine
        {
            char character;
            int  number;
            char   *str;
            double    exp;
        };

        一個union只能設置一個足夠大的空間來存儲一個最大長度的數據成員,對于上述的例子而言:最大的長度為double型,所以StateMachine的空間大小就是double數據類型的大小。

        其二:大小端對union數據類型的影響
        eg.
        unon
        {
            int i;
            char a[2];
        };*p.u
        p=&u;
        p->a[0]=0x39;
        p->a[1]=0x38;
        p.i的值應該為多少?
        這里需要考慮存儲的模式:大端和小端
        大端模式(Big_endian):字數據的高字節存儲在低地址中,而字數據的低字節則存放在高地址中。
        小端模式(Little_endian):字數據的 高字節存儲在高地址中,而字數據的低字節則存放在低地址中。
        union 型數據所占的空間等于其最大的成員所占的空間。對union 型的成員的存取都是相對于該聯合體基地址的偏移量為0 處開始,也就是聯合體的訪問不論對哪個變量的存取都是從union 的首地址位置開始。由此可以看出p.i的值應為0x39.

        其三:如何確認當前系統的存儲模式
        請寫一個C 函數,若處理器是Big_endian 的,則返回0;若是Little_endian 的,則返回1。
        以大端模式存儲,其內存布局如下圖:

        以小端模式存儲,其內存布局如下圖:

        變量i 占4 個字節,但只有一個字節的值為1,另外三個字節的值都為0。如果取出低
        地址上的值為0,毫無疑問,這是大端模式;如果取出低地址上的值為1,毫無疑問,這是
        小端模式
        程序如下:
        int checkSystem( )
        {
        union check
        {
        int i;
        char ch;
        } c;
        c.i = 1;
        return (c.ch ==1);
        }
        不過要說明的一點是,某些系統可能同時支持這兩種存儲模式,你可以用硬件跳線或在編譯器的選項中設置其存儲模式。
        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮