例1
#include
using
namespace
std;
//#pragma pack(2) pragma pack(x)可以改變編譯器的對齊方式
union u1
;union u2
;union u3
;int main()
不僅僅union,對於別的復合資料型別,如union、struct、class的對齊方式為成員中最大的成員對齊方式。
1.對於u1來說,大小就是最大的double型別成員a
2.對於u2來說,最大的空間是char[13]型別的陣列。由於int資料b的存在,u2的對齊方式變成4。
3.對於u3來說,最大的空間是char[13]型別的陣列。
例2#include
using
namespace
std;
#pragma pack(2)
union u
;int main()
對齊是可以更改的,使用#pragma pack(x)可以改變編譯器的對其方式。
c++固有型別的對齊取編譯器對齊方式與自身大小中較小的乙個。
例2中手動更改了對齊方式為2,int對齊方式為4,自身對齊為2,去最小者,
所以 sizeof(u)= 10。
使用sizeof計算聯合體的大小
include using namespace std union u union u2 union u3 int main int main int main cout 解析 上述 中用 pragma pack將對齊設定為1,由於結構體test中的成員s1,s2和i的自身對齊分別為2 2和4,都小...
聯合體 位域結構體 聯合體的妙用
在c語言中,變數的定義是分配儲存空間的過程。一般的,每個變數都具有其獨有的儲存空間,那麼可不可以在同乙個記憶體空間中儲存不同的資料型別 不是同事儲存 呢?答案是可以的,使用聯合體就可以達到這樣的目的。聯合體也叫共用體,在c語言中定義聯合體的關鍵字是union。定義乙個聯合型別的一般形式為 union...
聯合體結構體型別大小判斷
根據現有的各種資料,c c 中聯合體型別在記憶體中的大小預設以最長的為準,並以長度最長的型別對齊。按照上述原則 union a 在記憶體中所佔位元組數應為sizeof int 5 並使其以sizeof double 對齊,在32位或者64位系統平台上,sizeof a 的值應為24.不過程式 inc...