【C言語】共用体とは?書き方や使い方を解説

目次から探す

共用体とは何か?

共用体(Union)は、C言語におけるデータ型の一つです。

共用体は、異なるデータ型のメンバーを同じメモリ領域で共有することができます。

つまり、同じメモリ領域に複数のデータ型を格納することができるのです。

共用体は、メモリの節約やデータの柔軟な扱いに役立ちます。

共用体のメンバー

共用体のメンバーの定義

共用体のメンバーは、異なるデータ型を持つことができます。

共用体の定義は、structと似たような構文を使いますが、メンバーのデータ型を指定するだけで、メンバー名は省略することができます。

union ユニオン名 {
    データ型 メンバー名1;
    データ型 メンバー名2;
    // ...
};

共用体のメンバーへのアクセス

共用体のメンバーへのアクセスは、ドット演算子(.)を使います。

共用体のメンバーは同じメモリ領域を共有しているため、どのメンバーにアクセスしても同じ値が取得されます。

union ユニオン名 変数名;
変数名.メンバー名 = 値;

共用体のメンバーの初期化

共用体のメンバーは、通常の変数と同じように初期化することができます。

共用体の初期化では、最初のメンバーに対して初期化が行われます。

union ユニオン名 変数名 = {値};

共用体の利用例

共用体の利用例1

共用体を使って、異なるデータ型を格納することができる変数を作成する例です。

#include <stdio.h>
union Data {
    int num;
    float decimal;
    char character;
};
int main() {
    union Data data;
    
    data.num = 10;
    printf("整数: %d\n", data.num);
    
    data.decimal = 3.14;
    printf("浮動小数点数: %f\n", data.decimal);
    
    data.character = 'A';
    printf("文字: %c\n", data.character);
    
    return 0;
}
整数: 10
浮動小数点数: 3.140000
文字: A

共用体の利用例2

共用体を使って、異なるデータ型の値を切り替えながら使用する例です。

#include <stdio.h>
union Data {
    int num;
    float decimal;
    char character;
};
int main() {
    union Data data;
    
    data.num = 10;
    printf("整数: %d\n", data.num);
    
    data.decimal = 3.14;
    printf("浮動小数点数: %f\n", data.decimal);
    
    data.character = 'A';
    printf("文字: %c\n", data.character);
    
    printf("整数: %d\n", data.num);
    
    return 0;
}
整数: 10
浮動小数点数: 3.140000
文字: A
整数: 65

共用体の利用例3

共用体を使って、異なるデータ型の値を同じメモリ領域で共有する例です。

#include <stdio.h>
union Data {
    int num;
    float decimal;
    char character;
};
int main() {
    union Data data;
    
    data.num = 10;
    printf("整数: %d\n", data.num);
    
    data.decimal = 3.14;
    printf("浮動小数点数: %f\n", data.decimal);
    
    printf("整数: %d\n", data.num);
    
    return 0;
}
整数: 10
浮動小数点数: 3.140000
整数: 1092616192

共用体の注意点

メモリの節約とデータの衝突

共用体は、メモリの節約に役立ちますが、複数のメンバーが同じメモリ領域を共有しているため、一度に1つのメンバーしか使用できません。

また、異なるデータ型の値を同じメモリ領域で共有するため、データの衝突に注意する必要があります。

共用体の利用時の注意点

共用体を使用する際には、どのメンバーが有効な値を持っているかを追跡する必要があります。

また、共用体のメンバーへのアクセスは、正しいデータ型で行う必要があります。

共用体のメンバーにアクセスする前に、そのメンバーが有効な値を持っているかを確認することも重要です。

目次から探す