C言語を習得する

サンプルプログラム union.c

(12)共用体

共用体はあるものを共用します。
それは...メモリです。

共用体は構造体と一緒に使います。

typedef struct {
	unsigned char	c0;
	unsigned char	c1;
	unsigned char	c2;
	unsigned char	c3;
} UC4;

typedef union {
	UC4			c;
	unsigned long	lng;
} ULONG;

ULONG	ulong;

と定義&宣言したulong共用体は、

ulong.c.c0 = 0x01;
ulong.c.c1 = 0x02;
ulong.c.c2 = 0x04;
ulong.c.c3 = 0x08;

printf( "ulong.lng = 0x%08x\n", ulong.lng );

printf( "\n" );
ulong.lng = 0xfffefdfc;
printf( "ulong.c.c3 = 0x%02x\n", ulong.c.c3 );
printf( "ulong.c.c2 = 0x%02x\n", ulong.c.c2 );
printf( "ulong.c.c1 = 0x%02x\n", ulong.c.c1 );
printf( "ulong.c.c0 = 0x%02x\n", ulong.c.c0 );

というプログラムを実行しますと、

ulong.lng = 0x08040201

ulong.c.c3 = 0xff
ulong.c.c2 = 0xfe
ulong.c.c1 = 0xfd
ulong.c.c0 = 0xfc

という結果になります。

感の良い方はお分かり頂けたのではないかと思いますが、共用体として定義したメンバclngのメモリが共用されています (共用されているメモリサイズは4バイトです)。 結果として共用体ulongのcのメンバc0c3に値を代入するとlngメンバの値も変化することになります。

このように共用体は構造体と一緒に利用すると複数のデータを1つのデータとして扱うことができます。 例えば関数の戻り値は1つしか返せませんが、共用体を利用しますと複数の値を返すこともできるようになり、とても重宝することがあります。

共用体、憶えると大変便利に使えると思いますのでご活用くださいね。


ページのTOPへ






メニュー