構造体型とよく似た型に共用体型があります。
今回は、この共用体の仕組みについて解説します。
共用体型の仕組み
共用体は、同じメモリの場所を複数の変数で共有したいときに使います。
「同じデータを、別の見方で扱いたい」ときに使うことが多いです。
例えば、1つのint型(4byte)の変数を、char型の配列[4]の変数として参照したいなど。
共用体型の定義の構文は次の通りです。
union 共用体型名 {
型名1 メンバー名1;
型名2 メンバー名2;
型名3 メンバー名3;
};共用体型は、構造体型のstructキーワードのかわりに、union キーワードを使います。
実際に、共用体型を定義すると次のようになります。
union Data {
int i;
char c;
};この場合、int型のメンバーiと、char型のメンバーcは、同じメモリの場所を共有します。
共用体の定義と使い方
共用体は、構造体の定義と使い方と同じです。
共用体の定義の構文は次の通りです。
union 共用体型名 共用体変数名;共用体の使い方は、構造体と同様に、.(ドット)でメンバーにアクセスします。
次に共用体を使用したプログラムを見てみましょう。
#include <stdio.h>
union Data {
int i;
char c;
};
int main(void)
{
union Data data;
data.i = 65; // 整数として代入
printf("整数としての値: %d\n", data.i);
printf("文字としての値: %c\n", data.c);
return 0;
}実行結果は次の通りです。
整数としての値: 65
文字としての値: Aこのプログラムでは、data.i に整数の65を代入しました。
これにより、data.c も65になります。これは、data.iと同じメモリを共有しているからです。
ところが、data.c を文字として見ると 'A' になります。
なぜなら、文字 'A' の文字コードが65だからです。
このように、同じデータを異なる型で見るということができます。
まとめ
- 共用体(union)は、同じメモリを複数のメンバーで共用する仕組み。
- 見た目は構造体に似ているが、メモリの使い方がまったく異なる。
- 共用体のメンバーは、すべて同じ場所(同じ箱)を使う。
- 「最後に書き込んだメンバー」と「読み出すメンバー」を一致させて使う。
- 同じデータを別の型として読みたいときや、メモリを節約したいときに使われる。
- 初心者のうちは「こういう仕組みがある」ことを知っておくだけで十分。