「構造体」と「共用体」の違い
予備知識
| 用語 | 意味 |
|---|---|
| 変数 | プログラミング言語における「値を入れておく箱」 |
| 変数の型 | 変数の種類 |
| 配列 | 変数を たくさん合体させた変数 |
| 配列の要素 | 配列の中身の箱ひとつひとつのこと |
それぞれの用語の意味
| 用語 | 意味 |
|---|---|
| 構造体 | 中に入れられる物の種類と数を自分で決められる、変数の型。見方を変えると、自分で型と要素の数を決められる「要素ごとの型が違う配列(っぽいやつ)」 |
| 共用体 | 省エネタイプの構造体(っぽいやつ) |
似ているところ
どちらも「中に入れられる物の種類と数を自分で決められる、変数の型」です。
元からある型の変数を寄せ集めて新しい型を作れます。
例えば「数字も文字も入る変数」を作ったりできます。

違うところ
構造体では複数の要素を同時に使えますが、共用体では複数の要素を同時に使えません。
共用体では、2つ目の要素を入れた時点で1つ目の要素に入れた値は消えてしまいます。
その理由は
構造体:中に入れる物の数だけ箱が用意される
共用体:箱が1つしか用意されない
からです。
例えば「数字も入れられるし文字も入れられる箱」を作るとしましょう。

この箱を構造体で作った場合「数字を入れられる箱を1つと文字を入れられる箱を1つ持ってきて、それを新しい大きな箱の中に入れたもの」ができあがります。

この構造体の中身は
数字を入れられる箱と文字を入れられる箱が1つずつ
です。
構造体の中には、2つの箱があります。

一方、共用体で作った場合は「数字も入れられるし文字も入れられる1つの箱」ができあがります。

この共用体の中身は
数字か文字を入れられる箱が1つ
です。
共用体の中には、箱が1つしかありません。
この1つの箱を使いまわします。

これが構造体と共用体の一番大きな違いです。
構造体では要素ごとに箱が用意されます。
よって
1.文字を入れる
2.数字を入れる
3.文字を取り出す
ができます。

共用体では全ての要素で同じ箱を使います。
よって
1.文字を入れる
2.数字を入れる
3.文字を取り出す
ができません。
2で数字を入れた時点で、1で入れた文字は潰れちゃうからです。

繰り返しになりますが
構造体では要素ごとに箱が用意されるが、共用体では全ての要素で1つの箱を使いまわす
のです。
備考
個人的には、まず「構造体とは何か?」をキッチリ理解することを お薦めします。
構造体が何かを理解できたら共用体も理解できたようなものです。
「前に入れた値が上書きされる構造体」が共用体
だと思えば、そこまで間違ってはいないはずです。






