久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> 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);
}
不過要說明的一點是,某些系統可能同時支持這兩種存儲模式,你可以用硬件跳線或在編譯器的選項中設置其存儲模式。
關閉窗口

相關文章

主站蜘蛛池模板: 精品欧美一区二区在线观看 | 日韩中文字幕一区二区 | 日日干干夜夜 | 日韩人体在线 | 日日摸日日添日日躁av | aa级毛片毛片免费观看久 | 亚洲一区二区精品视频在线观看 | 国产成人精品久久二区二区 | 久久四虎| 国产成人精品综合 | 久久激情网 | 国产精品免费一区二区 | 射欧美| 中文字幕一区二区三区在线观看 | 国产精品久久久一区二区三区 | 日韩在线观看一区二区三区 | 亚洲网站在线 | 成人日韩av | 国产乱码精品一区二区三区忘忧草 | 综合久久网| 91爱啪啪| 中文字幕在线看 | 久久久久国产 | 欧美黄在线观看 | 国产成人网 | 成人伊人| 91视频电影| 韩日av片 | 精品麻豆剧传媒av国产九九九 | 欧美性视频在线播放 | 91久久视频 | 国产日产精品一区二区三区四区 | 国产乱码精品一品二品 | 天天插日日操 | 成人精品一区二区三区中文字幕 | 久久久久久久国产精品视频 | 国产目拍亚洲精品99久久精品 | 91青娱乐在线 | 国产精品精品视频一区二区三区 | 日韩欧美中文在线 | 成人国产精品久久久 |