共用体: メモリの共有
「箱」は一つだけ。中身の解釈を変える変態的な型。
共用体 (Union)
全てのメンバが同じメモリ領域を共有する型。一度に1つのメンバしか使えない。
エンディアン
マルチバイトデータを並べる順序。これを確認するために共用体が使われることがある。
場所を共有する
共用体 (union) は、構造体と定義方法は似ていますが、中身は全く違います。構造体がメンバごとに場所を確保するのに対し、共用体は 「全てのメンバで同じ場所(一番大きいメンバのサイズ)」を使い回します。
つまり、int を書き込んでから float
を読み出すと、壊れた(あるいはビットレベルで解釈された)値が出てきます。「あるいは
(OR)」の関係です。
union Data { int i; float f; char str[4];};
union Data data;data.i = 0x12345678;
// 全員が同じ場所を見ているprintf("%x\n", data.i); // 12345678printf("%c\n", data.str[0]); // エンディアンによって 0x78 か 0x12 が見える