共用体について

最終更新日:2004-06-19.

今回は、共用体についてちょっと。
これは、一つの変数でいろいろな型のデータを処理したい場合に
使用できます。

・共用体

共用体(union)を使用すると、異なる型のデータを同じアドレスで
処理することができます。
(これは構造体にちょっとにています。)

共用体を使用するには、型枠を宣言します。

例えば、共用体の型枠をdataとして、そのメンバーを
char, int, long, floatの四つにするとします。
この場合、以下のようになります。

union data {
char c;
int i;
long l;
float f;
};

そして、変数を宣言して使用するには、以下のようにします。

union data x;

共用体変数 xのサイズは、どのメンバーのデータも処理できるように
一番大きなメンバーのサイズになります。
上記の例では4バイトになります。

次に、各メンバーにアクセスするには、変数名とメンバー名を
半角のピリオド(.)で結びます。

x.c;
x.i;
x.l;
x.f;

のようになります。

また、共用体変数へのポインタも使用することができます。
その際、各メンバーにアクセスするにはポインタ変数とメンバーとを
ハイフンとだいなり (->) 記号で結びます。

union data *y;

y->c;
y->i;
y->l;
y->f;

のようになります。

では、ソースで見てみましょう。
今回は、DOSのバージョン番号を調べる方法です。
+------------------------------------------------------------+
/* filename=no014-1.c */
/* include */
#include <stdio.h>
#include <dos.h>
/* main */
int main( )
{
/* 共用体宣言 */
union REGS in, out;
/* 値をセット */
in.h.ah=0x30;
/* DOSのシステムコールを実行 */
intdos(&in, &out);
/* バージョン番号の表示 */
printf("%d.%d\n", out.h.al, out.h.ah);
return 0;/* 終了 */
}
+------------------------------------------------------------+

上記のソースをコンパイルして実行すると以下のように表示されました。
7.10

上記はWindows98SEのMS-DOSプロンプトより実行しました。

戻る