Like Share Discussion Bookmark Smile

J.J. Huang   2019-12-02   C C 語言技術 <201910>   瀏覽次數:次   DMCA.com Protection Status

C語言 - 第三十五章 | 聯合(union)

聯合(union)

unionstruct一樣,都是產生一種新的資料型態,只是不同的是,struct是每個成員變數都配置一段空間,union則是共用一段記憶體空間。

union維護足夠的空間來置放多個資料成員中的「一種」,而不是為每一個資料成員配置空間,使用關鍵字union來定義,在union中所有資料成員共用一個空間,同時間只能儲存其中一個成員的資料。

1
2
3
4
5
6
union StateMachine {
char character;
int number;
char *str;
double exp;
};

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>

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

int main() {
union StateMachine machine;

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

return 0;
}
1
2
3
// 執行結果
sizeof: 4
number: 1

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


註:以上參考了
union
C語言-struct、union、enum
C 程式設計教學:如何使用聯合 (Union)