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.規則就是傳送方和接受方必須按照相同的順序來通訊,否則就會出現錯誤。這就是通訊當中的大小端模式。我們講的實質計算機儲存系統中的大小端。在...