トップページ > キーワード検索 > union
C言語規格
C言語(その他)
プログラム
その他
union
機能 型指定子の一つで、共用体を表す。
共用体とは、いくつかの変数のデータを共有して扱うため型を表す。
つまり、共用体のある変数の値を変更した場合、共用体の他の変数の値も変更される。

また、各々の構造体宣言には[:定数]を用いてビットフィールドを宣言できる。
ビットフィールドとは、ビット単位でサイズを指定することを表す。
ただし、構造体宣言は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





inserted by FC2 system