雜項 C語言中union與大小端模式的理解

2021-06-27 10:18:05 字數 1364 閱讀 3727

union聯合體

先看定義方法,他和結構體的定義是相同的

union dtdata;
在看看他有什麼特性

printf("%d\n", sizeof(data));

printf("%d\n", sizeof(data.b));

printf("%d\n", sizeof(data.a));

printf("%p\n",&data.a);

printf("%p\n",&data.b);

printf("%p\n",&data);

輸出結果如下:

814

0xbfc26200

0xbfc26200

0xbfc26200

可以看出

1、union中可以定義多個成員,union的大小由最大的成員(double)的大小決定。

2、union成員共享同一塊大小的記憶體(位址都相同),一次只能使用其中的乙個成員。

data.a=1;

if(data.b==1)

輸出結果為:小端模式(稍後解釋)

可以看出

3。對某乙個成員賦值,會覆蓋其他成員的值

在看一段**

data.a=259;

char *p=(char *)&data;

int i;

for(i=0;i輸出結果:

0xbfc26200 00000003 (00000011)

0xbfc26201 00000001 (00000001)

0xbfc26202 00000000

0xbfc26203 00000000

0xbfc26204 00000000

0xbfc26205 00000000

0xbfc26206 00000000

0xbfc26207 00000000

從這段**中可以理解大小端的差異  

259用二進位制滿16位表示為: 00000001 00000011

00000001是他的高位存在於高位址           

00000011是他的低位存在於低位址(小端模式)

而大端模式是相反的。

明白了這些,也要知道使用union的情況:

1.要使用幾個變數,但其中只有乙個變數在任意給定的時刻有有效值

2.程式要處理許多不同型別資料,但是一次只能處理一種,要處理的型別在執行期間確定

3.要在不同的時間訪問相同的資料,但在不同的情況下該資料的型別是不同的 

第一次寫部落格,貼**貼的不好,還有**有問題的地方,請提出一起討論。

union與大小端

union是c語言中的乙個關鍵字,它的用法其實與struct很相似。union中的所有資料成員共用乙個空間,同一時間只能儲存其中的乙個資料成員,並且所有的資料成員有相同的起始位址。例如 union u u 我們可以使用sizeof來檢測一下上面例子的大小,可以發現它的大小是其中最大長度double型...

C語言中大小端問題以及union的使用

大端模式和小端模式 記憶體的最小儲存單元是乙個位元組,即每個位址單元對應乙個位元組,資料的操作都是以位元組為單位,乙個位元組等於8bit 對於32位的編譯器 char 1個位元組 char 即指標變數 4個位元組 32位的定址空間是2 32,即32個bit,也就是4個位元組。同理64位編譯器 sho...

C語言中的大小端

大小端模式 大端模式 big endian 和小端模式 little endian 串列埠通訊時,一次只能傳送乙個位元組,這時候就有乙個問題,是從0 1還是從1 0.規則就是傳送方和接受方必須按照相同的順序來通訊,否則就會出現錯誤。這就是通訊當中的大小端模式。我們講的實質計算機儲存系統中的大小端。在...