共用體 union 的用法

2021-06-23 06:19:36 字數 937 閱讀 7125

以前c語言學到union的時候,總是疑惑這傢伙該怎麼用,有什麼存在的價值,後來接觸到的東西多了,發現union這個定義還是有他的用武之地的。

在定義union資料結構的時候,利用位差就可以很容易的讀出多位元組資料的高地位,甚至單個位元組的資料。

例如:利用共用體型別的特點分別取出short型變數高位元組和低位元組中的兩個數。

共用體變數un中包含兩個成員: 字元陣列c和short型變數a,他們恰好都佔兩個位元組的儲存單元。由於是公用儲存單元,給un的成員a賦值後,記憶體中的資料儲存情況如圖

當給成員un.a賦值16961後,系統將按short整形的把數存放到儲存空間中,分別輸出un.c[0],un.c[1]即完成了把乙個int型整數分別按高位元組和低位元組輸出。

在嵌入式中,union這一資料結構就更加有用了,通常可以把暫存器定義成這種union的結構,這樣既可以精確地給每個暫存器的位賦值,還可以給整個暫存器整體賦值。

extern volatile unsigned int  rpor13 __attribute__((__sfr__));

__extension__ typedef struct tagrpor13bits ;

struct ;

};} rpor13bits;

extern volatile rpor13bits rpor13bits __attribute__((__sfr__));

在這個暫存器定義中,既可以使用rpor13bits.rp26r = ***x,來同時賦值多個位,也可以使用rpor13bits.rp26r0等來給單個暫存器的位賦值。

union 共用體名

union 共用體名 變數名 共用體表示幾個變數共用乙個記憶體位置,在不同的時間儲存不同的資料型別和不同長度的變數。在union中,所有的共用體成員共用乙個空間,並且同一時間只能儲存其中乙個成員變數的值。正是利用union這個公用同塊位址的特點可以有很多的用途。1.cpu大小端的測試 首先了解下大小...

(C語言)共用體union的用法舉例

以前在學校學習c語言的時候一直搞不懂那個共用體union有什麼用的。工作之後才發現它的一些妙用,現舉例如下 1.為了方便看懂 比如說想寫乙個3 3的矩陣,可以這樣寫 注 下面用紅色部分標記的地方是後來新增上去的,謝謝yrqing718的提醒!struct matrix float f 3 3 mat...

union 共用體的使用

union 共用體名 變數名 共用體表示幾個變數共用乙個記憶體位置,在不同的時間儲存不同的資料型別和不同長度的變數。在union中,所有的共用體成員共用乙個空間,並且同一時間只能儲存其中乙個成員變數的值。正是利用union這個公用同塊位址的特點可以有很多的用途。1.cpu大小端的測試 首先了解下大小...