工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

C言語 共用体(Union)解説: 定義・使用法・構造体との比較

C言語 共用体(Union)解説

C言語の共用体の定義、作成、アクセス方法を学び、メモリレイアウトと用途における構造体との違いを理解します。

共用体はC言語のユーザー定義型で、構造体とは異なり、一度にメンバーの値のどれか1つだけを保持できます。これにより、メモリ効率の良いデータ表現や、低レベルプログラミングでの型パンニングに最適です。


共用体の定義

unionキーワードで新しい型を宣言します。例:

union Car {
    char name[50];
    int price;
};

上記コードは、50文字の文字列または整数価格のどちらかを格納できる派生型union Carを作成します。


共用体変数の作成

共用体の定義だけではメモリは確保されません。使用するにはその型の変数を宣言します:

union Car car1, car2, *car3;

あるいは、定義と変数宣言を併記することもできます:

union Car {
    char name[50];
    int price;
} car1, car2, *car3;

両例で、car1とcar2は共用体インスタンス、car3は共用体へのポインタです。


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

直接アクセスにはドット(.)演算子、ポインタ経由にはアロー(->)演算子を使用:


共用体 vs 構造体

構造体は全メンバー分のスペースを確保しますが、共用体のサイズは最大のメンバーのサイズと等しいです。以下の比較を見てください:

#include <stdio.h>
union UnionJob {
    char name[32];
    float salary;
    int workerNo;
} uJob;
struct StructJob {
    char name[32];
    float salary;
    int workerNo;
} sJob;
int main() {
    printf("size of union = %zu bytes\n", sizeof(uJob));
    printf("size of structure = %zu bytes", sizeof(sJob));
    return 0;
}

出力:

size of union = 32
size of structure = 40

構造体は40バイト(32+4+4)を占有するのに対し、共用体は最大メンバーname[32]の32バイトのみを占有します。共用体の全メンバーは同じメモリ領域を共有します。


実践例: メンバーの上書き

#include <stdio.h>
union Job {
    float salary;
    int workerNo;
} j;
int main() {
    j.salary = 12.3;
    j.workerNo = 100; // 前の値を上書き
    printf("Salary = %.1f\n", j.salary);
    printf("Number of workers = %d", j.workerNo);
    return 0;
}

出力:

Salary = 0.0
Number of workers = 100

salaryとworkerNoが同じメモリを共有するため、一方に書き込むと他方がクリアされます。


実用的なユースケースについては、「なぜC言語で共用体が必要なのか?」を参照してください。

C言語

  1. 業務用エアコン適正サイズ選定の専門ガイド:最適パフォーマンスのために
  2. 製造業におけるAI市場、2026年までに48億ドル規模へ、CAGR 28.1%で成長
  3. 空圧バルブサイジングの実践ガイド:基礎から応用まで
  4. 管継手ユニオンの定義・用途・メリット:異種金属管接続と着脱容易性
  5. ガンスミス(銃器製造・修理)に最適な旋盤サイズの選び方:完全ガイド
  6. エアレシーバーの適正サイズ選定:性能と効率を最適化
  7. 産業用エアコンプレッササイジング:適切なユニット選定のエキスパートガイド
  8. アルミニウムバーストックを安全かつ精密に切断するプロフェッショナルガイド
  9. C言語共用体:複数データ型の効率的なメモリ管理
  10. Java Enum完全ガイド:列挙型とEnumクラスの活用法
  11. Java Enumコンストラクタ徹底解説:実践例で理解する