搜尋

首頁  >  問答  >  主體

c++ - C語言中的union共用體有什麼用?

RT,這種結構最後一次賦值會把之前的賦值覆蓋掉,所以很好奇請問一下這種東西一般應用在什麼場景呢?

世界只因有你世界只因有你2747 天前1036

全部回覆(5)我來回復

  • 漂亮男人

    漂亮男人2017-06-12 09:26:44

    省內存,方便取高低位元組

    回覆
    0
  • 某草草

    某草草2017-06-12 09:26:44

    最初目的就是為了節省內存,你想當初C語言在上個世紀八十年代才開始大規模使用,那時的內存很寶貴的。

    回覆
    0
  • ringa_lee

    ringa_lee2017-06-12 09:26:44

    可以提供對同一段資料不同的存取介面。 。 。
    舉個例子,曾經做嵌入式的時候,可以這樣寫:

    // 没有字节对齐,或者字节对齐为1,int 占4字节
    typedef union {
        unsigined int num;
        struct {
            unsigned char byte0;
            unsigned char byte1;
            unsigned char byte2;
            unsigned char byte3;
        } bytes;
    } Demo;

    不過這樣寫也不太簡潔,而且這段程式碼在 PC 裡面和直接透過位移取每一個位元組效率是一樣的。只是舉個例子,不要太糾結。

    回覆
    0
  • 女神的闺蜜爱上我

    女神的闺蜜爱上我2017-06-12 09:26:44

    一般用來判斷大小端

    回覆
    0
  • 给我你的怀抱

    给我你的怀抱2017-06-12 09:26:44

    在嵌入式開發中用的比較多,我這裡給個例子,和上面 @zonxin 的差不多

    typedef struct __regular_descriptor_4_high {
        union {
            U32 value;
            struct {
                U32 raid_id0    : 4;
                U32 raid_cmd0   : 4;
                U32 raid_id1    : 4;
                U32 raid_cmd1   : 4;
                U32 raid_id2    : 4;
                U32 raid_cmd2   : 4;
                U32 raid_id3    : 4;
                U32 raid_cmd3   : 4;
            } reg_des_bit;   
        } u; 
    } reg_des_4_high;

    要讀取整個暫存器可以讀value,要寫不同的bit-filed就用reg_des_bit來寫。

    回覆
    0
  • 取消回覆