From Gossip@caterpillar

C Gossip: union

union是一種特殊的類別,使用關鍵字union來定義,union維護足夠的空間來置放多個資料成員中的「一種」,而不是為每一個資料成員配置空間, 在union中所有的資料成員共用一個空間,同時間只能儲存其中一個成員的資料,一個定義union的例子如下:
union StateMachine {
    char character;
    int number;
    char *str;
    double exp;
};


一個union只配置一個足夠大的空間以來容納最大長度的資料成員,以上例而言,最大長度是double型態,所以StateMachine的記憶體空間 就是double型態的長度:

#include <stdio.h>

union StateMachine {
char character;
int number;
char *str;
};

int main(void) {
union StateMachine machine;

machine.number = 1;
printf("sizeof: %d\n", sizeof(machine));
printf("number: %d\n", machine.number);

return 0;
}

執行結果:
1

由於union的資料成員共用一個記憶體空間,所以必須存取正確的資料成員才能正確的取出資料。