のように宣言します。最後のunion_vが共用体変数となります。 a, str, bなどは共用体メンバといいます。 使い方は、構造体と同じです。ただし、格納できるのは1回に どれかのメンバのみです。次に別のメンバを使うと最初のは 消えて無くなります。十分注意して使いましょう。従って、 宣言時に初期化することはできません。 下に、共用体の間違った使い方の例を示します。union union_tag { int a; char *str; float b; } union_v;
共用体の宣言・使い方は構造体とほとんど同じです。
共用体のサイズは、メンバの中の最大のものとなります。
ポインタの使い方も構造体と同じです。
最後がおかしいですね。このように、共用体を使うときは
十分な注意が必要です。
では、具体的にポインタの使い方を
見てみましょう。構造体の時と全く同じですね。
sizeof は演算子です。変数や型に割り当てられる メモリ容量をバイトで与えます。
左の例の場合、最大の共用体メンバはstr[32]の 32バイトですね。
構造体の場合は、各メンバのバイト数の合計です。 ただし、「位置合わせ」ということが起こり 単純なバイト数の合計より大きくなることがあります。
ポインターの使い方は、構造体とともに今一度
復習してください。
実行結果は、左のようになります。このように、
共用体を単独で使うことはあまりありません。
最初にも言ったように構造体のメンバとして
使うことが多いようです。たとえば、
氏名・年齢・給与といったメンバを
持つ構造体では、給与が月給であったり
時給であったりすると思います。
こういう場合共用体を使います。
Update Nov/25/1996 By Y.Kumei