union在C中本質上是一個結構體,用法和struct相似,用
union 名稱 {
//... 成員
};來宣告
型別使用時,要在名稱前加上關鍵字union
union 型別名稱 變數名稱;
在呼叫時用字尾表示式expression.identifier的形式來呼叫成員:
a.member1 = 10; // a為union
p->member1 = 20; // p為union的指標
但有一些不同點:
1. union,顧名思義,就是多個成員共用一塊記憶體。在編譯時會選取成員中長度最長的來宣告。也就是說在如下與程式片段中:
union a { //聲明瞭三個成員,但是長度不一(後面sizeof的結果不同機器結果不同,但double肯定是最長的),於是編譯器會選取double的長的作為union a的長度
int a1; // sizeof(int) = 4
float a2; // sizeof(float) = 8
double a3; // sizeof(double) = 16
};也就是說,上述union宣告在記憶體中等同於
struct a {
double a3;
};
2. 根據第一條的特點,在對union成員進行賦值後,要注意使用時一定要呼叫賦值過的成員。
union在C中本質上是一個結構體,用法和struct相似,用
union 名稱 {
//... 成員
};來宣告
型別使用時,要在名稱前加上關鍵字union
union 型別名稱 變數名稱;
在呼叫時用字尾表示式expression.identifier的形式來呼叫成員:
a.member1 = 10; // a為union
p->member1 = 20; // p為union的指標
但有一些不同點:
1. union,顧名思義,就是多個成員共用一塊記憶體。在編譯時會選取成員中長度最長的來宣告。也就是說在如下與程式片段中:
union a { //聲明瞭三個成員,但是長度不一(後面sizeof的結果不同機器結果不同,但double肯定是最長的),於是編譯器會選取double的長的作為union a的長度
int a1; // sizeof(int) = 4
float a2; // sizeof(float) = 8
double a3; // sizeof(double) = 16
};也就是說,上述union宣告在記憶體中等同於
struct a {
double a3;
};
2. 根據第一條的特點,在對union成員進行賦值後,要注意使用時一定要呼叫賦值過的成員。