第32章 共用体  


今回は、共用体(union)について解説します。 構造体と、書き方はほとんど同じです。 また、これを単独で使うことは少なく、構造体の メンバとして使われることが多いようです。 普通、変数はint型で宣言するとずっとint型で 使われます。(まだ当ホーム・ページではやっていませんが 型キャストというのもあります。)ところが、共用体は いろいろ型の異なるデータを格納することができます。

union union_tag { int a; char *str; float b; } union_v;

のように宣言します。最後のunion_vが共用体変数となります。 a, str, bなどは共用体メンバといいます。 使い方は、構造体と同じです。ただし、格納できるのは1回に どれかのメンバのみです。次に別のメンバを使うと最初のは 消えて無くなります。十分注意して使いましょう。従って、 宣言時に初期化することはできません。 下に、共用体の間違った使い方の例を示します。

共用体の宣言・使い方は構造体とほとんど同じです。 共用体のサイズは、メンバの中の最大のものとなります。 ポインタの使い方も構造体と同じです。

最後がおかしいですね。このように、共用体を使うときは 十分な注意が必要です。

では、具体的にポインタの使い方を 見てみましょう。構造体の時と全く同じですね。

sizeof は演算子です。変数や型に割り当てられる メモリ容量をバイトで与えます。

左の例の場合、最大の共用体メンバはstr[32]の 32バイトですね。

構造体の場合は、各メンバのバイト数の合計です。 ただし、「位置合わせ」ということが起こり 単純なバイト数の合計より大きくなることがあります。

ポインターの使い方は、構造体とともに今一度 復習してください。

実行結果は、左のようになります。このように、 共用体を単独で使うことはあまりありません。 最初にも言ったように構造体のメンバとして 使うことが多いようです。たとえば、 氏名・年齢・給与といったメンバを 持つ構造体では、給与が月給であったり 時給であったりすると思います。 こういう場合共用体を使います。


[Index][総合Index] [Previous Chapter] [Next Chapter]

Update Nov/25/1996 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。