機能 |
型指定子の一つで、共用体を表す。 共用体とは、いくつかの変数のデータを共有して扱うため型を表す。 つまり、共用体のある変数の値を変更した場合、共用体の他の変数の値も変更される。 また、各々の構造体宣言には[:定数]を用いてビットフィールドを宣言できる。 ビットフィールドとは、ビット単位でサイズを指定することを表す。 ただし、構造体宣言はint型のみ使用可能。 共用体の各変数にアクセスするには「.」を用いて行う。また、ポインタ経由でアクセスする場合は「->」を用いて行う。 |
---|---|
定義 |
union [識別名]option { <共用体宣言リスト> } <共用体宣言リスト> [<共用体宣言>]repeat <共用体宣言> 型 変数名 [: 定数]option ; |
実装例 |
#include <stdio.h> int main(void) { union XYZ /* 共用体XYZの定義 */ { int x, y; /* int型の変数x,yの定義 */ char z; /* char型の変数zの定義 */ }; union { /* 変数を宣言した場合は識別名を省略可能 */ int a; } a; /* 共用体変数の宣言 */ union BITS /* ビットフィールドを用いた定義 */ { unsigned int bit1 : 1; /* 1ビット幅 値範囲=0〜1 */ unsigned int bit7 : 7; /* 7ビット幅 値範囲=0〜127 */ unsigned int byte1 : 8; /* 1バイト幅 値範囲=0〜255 */ unsigned int byte3 : 24; /* 3バイト幅 値範囲=0〜16777215 */ }; union XYZ s; /* 共用体XYZを用いた変数の宣言 */ union XYZ *p; /* 共用体XYZのポインタ変数の宣言 */ s.x = 10; /* 共用体XYZの変数xに代入 */ s.z = 'c'; /* 共用体XYZの変数zに代入 */ p = &s; /* 変数aへのポインタを設定 */ p->y = 97; /* ポインタからの構造体XYZのアクセス */ printf("%d\n", s.x); printf("%d\n", s.y); printf("%c\n", s.z); return 0; } |
実行結果 |
97 97 a |
union