サンプルプログラム 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
という結果になります。
感の良い方はお分かり頂けたのではないかと思いますが、共用体として定義したメンバcとlngのメモリが共用されています
(共用されているメモリサイズは4バイトです)。
結果として共用体ulongのcのメンバc0~c3に値を代入するとlngメンバの値も変化することになります。
このように共用体は構造体と一緒に利用すると複数のデータを1つのデータとして扱うことができます。
例えば関数の戻り値は1つしか返せませんが、共用体を利用しますと複数の値を返すこともできるようになり、とても重宝することがあります。
共用体、憶えると大変便利に使えると思いますのでご活用くださいね。