共用体(union)
構造体みたいなやつだよ
すべての要素で1つの場所を使いまわすよ
複数の要素を同時には使えないよ
簡単に書くよ
共用体(union)(読:キョウヨウタイ)とは
構造体
(中に入れられる物の種類と数を自分で決められる、変数の型)の仲間
であり
すべての要素で同じ場所を使いまわすから「一度に使えるのは1つの要素」になる(2つ目の要素に値を入れると今まで入っていた値が消える)構造体っぽいやつ
です。
詳しく書くよ
順番に見ていきましょう。
まずは予備知識として
・変数
・変数の型
・構造体
について説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。
共用体は構造体の仲間です。
共用体を理解するには、構造体と比較しながら勉強するのが手っ取り早いと思います。
「構造体?よく分かってないよ」な人は、この機会に構造体も覚えてあげてください。
それでは順番に見ていきます。
変数は「プログラミング言語における『値を入れておく箱』」です。
処理の途中で値を入れたり、逆に取り出したりできます。
変数の型は「この箱(変数)には、どんな種類の物を入れていいですよ」な決まりです。
例えば、そうですね。
手ごろな大きさのダンボール箱が あったとしましょう。
ピヨ太君がやってきて、その箱にマジックで大きく「食べ物用」と書きました。
「食べ物用」と書いたので、このダンボールに入れていいのは食べ物だけです。
食べ物以外を入れようとすると、ピヨ太君にメッチャ怒られます。
この話におけるダンボール箱が「変数」です。
マジックで書いた「食べ物用」が「変数の型」になります。
変数の型には、いろいろな種類があります。
数字を入れられる箱、文字を入れられる箱、文字列を入れられる箱、いろいろです。
例えば「数字しか入れられませんよ」な箱には数字しか入りません。
文字を入れようとすると怒られます。
「文字しか入れられませんよ」な箱には文字しか入りません。
数字を入れようとすると怒られます。
構造体は「中に入れられる物の種類と数を自分で決められる、変数の型」です。
例えば、そうですね。
ピヨ太君が「数字を1つと文字を1つ入れられる箱を使おう」と決めたとしましょう。
でも、そんな箱は ありません。
どうすれば良いでしょうか?
簡単です。
数字を入れられる箱を1つと文字を入れられる箱を1つ持ってきて、それを新しい大きな箱の中に入れてやれば良いのです。
そうすると、新しい大きな箱は「数字を1つと文字を1つ入れられる箱」になります。
実際には、数字は大きな箱の中にある「数字を入れられる箱」の中に入ります。
文字は大きな箱の中にある「文字を入れられる箱」の中に入ります。
とはいえ、ピヨ太君から見れば数字も文字も「大きな箱」の中に入れています。
この話で出てきた大きな箱が構造体です。
構造体の中身は自分で決められます。
今回のピヨ太君は「数字を1つと文字を1つ入れられる箱」を作りましたが「数字を3つと文字を5つ入れられる箱」でもいいですし、それ以外の形でも かまいません。
元々ある型の変数を寄せ集めて新しい型を作れるのが構造体の特徴です。
ここまでの説明で、構造体については何となく分かったでしょうか。
以上を踏まえて、本題に入ります。
ズバリ!
省エネタイプの構造体
が「共用体」です。
……「省エネタイプ」って何だよ!
そう思う人が大半でしょう。
分かっています。
分かっていますって。
これから順番に説明していきます。
先ほどの例でピヨ太君が作った構造体を思い出してください。
「数字を1つと文字を1つ入れられる箱」です。
この構造体は、数字を入れられる箱を1つと文字を入れられる箱を1つ持ってきて、それを新しい大きな箱の中に入れたものです。
実は、共用体でも「数字を1つと文字を1つ入れられる箱」を作れます。
ただし、中身が違います。
構造体の中身は
数字を入れられる箱と文字を入れられる箱が1つずつ
でした。
構造体の中には2つの箱があります。
それに対して、共用体の中身は
数字か文字を入れられる箱が1つ
です。
共用体の中には箱が1つしかありません。
この1つの箱を使いまわします。
入れられる物は同じですが、中身の構造が違いますよね。
構造体では要素ごとに箱が用意されるが、共用体では全ての要素で1つの箱を使いまわす
のです。
これが構造体と共用体の一番大きな違いです。
構造体では要素ごとに箱が用意されます。
よって
1.文字を入れる
2.数字を入れる
3.文字を取り出す
ができます。
共用体では全ての要素で同じ箱を使います。
よって
1.文字を入れる
2.数字を入れる
3.文字を取り出す
ができません。
2で数字を入れた時点で、1で入れた文字は潰れちゃうからです。
似ているけど違いますよね。
構造体も共用体も「中に入れられる物の種類と数を自分で決められる、変数の型」です。
元からある型の変数を寄せ集めて新しい型を作れます。
数字も文字も入る変数を作ったりできます。
これが構造体と共用体の似ている点です。
構造体では複数の要素を同時に使えますが、共用体では複数の要素を同時に使えません。
共用体では、2つ目の要素を入れた時点で1つ目の要素に入れた値は消えてしまいます。
これが構造体と共用体の違う点です。
なお、共用体はプログラミングが得意な人がカッコ付けたソースコード(プログラムの元ネタ)を書きたいときに使うものです。
「分かったような分からないような……」であれば使わない方が無難だと思います。
共用体を使わなくても同じような処理を書けますからね。
不具合を入れてしまうくらいなら、素直に分かりやすい書き方をしてください。
一言でまとめるよ
まぁ「共用体」って単語が出てきたら「省エネタイプの構造体
(中に入れられる物の種類と数を自分で決められる、変数の型)(みたいなやつ)なんだな~」と お考えください。






