C語言學習之 union聯合

2021-10-06 17:30:42 字數 962 閱讀 2549

union var

var;

intmain()

/* 結果是8;符合聯合體所佔的記憶體長度等於其長度最長成員的長度

*/

union var

var;

intmain()

/* 結果是16;涉及記憶體對齊

最長的資料型別是double,佔8個位元組,arr佔了12個位元組,但是要和double對齊,占用記憶體是8的倍數,也就是16.

*/

union和struct的異同:

相同點:都可以包含很多種資料型別和變數。

不同點:

#include

using namespace std;

union vars

var;

struct stus

stu;

intmain()

上張圖便於理解

對於union來說先找共用體中占用位元組最大的資料型別,是double佔8個位元組,再找占用空間最大的成員是arr,占用12 位元組,占用空間要是8的倍數,結果就是16.

對於struct來說,分配記憶體大小大於等於資料成員所佔記憶體之和。找出結構體中資料成員占用位元組最大的是double佔8個位元組,結構體所佔記憶體之和為30,記憶體補齊為8的倍數,最終為32。

ps:至於對齊係數,每個特定平台上的編譯器都有自己的預設「對齊係數」,也可以通過預編譯命令#pragma pack(n),n=1,2,4,8,16來改變這一係數,其中的n就是你要指定的「對齊係數」。

先留著坑,回頭再寫一篇詳談。

C語言 聯合(union)

聯合 union 是一種資料型別,他能在同一塊空間中儲存不同資料型別,但不是同時儲存。如果我們想設計一種結構,其能儲存一些既無規律,也無順序的資料,那麼就可以用到聯合。建立聯合和建立結構體相同,需要宣告乙個模板,再用這個模板建立變數,下面給出例子 union stu 根據上面宣告,該結構可以儲存乙個...

c 學習之聯合體union

特點 共享記憶體,長度由最大位元組型別決定 例如 union data data在64位作業系統下就是8位元組,由最長double決定 data user std cout sizeof data std endl 結果為8是顯然的 然後看一下各個成員的記憶體 std cout user.ihp s...

c語言 union聯合體

linux中聯合體union實現判斷little endian 和 big endian 大端和小端 1 聯合體的資料成員從低位元組開始對齊 2 little endian 和 big endian。little endian 和 big endian 是 cpu 存放資料的兩種不同順序。對於整型 ...