a 、またはa 、または...のいずれかになる変数があるとよいでしょう。char
int
これは、共用体の実際の型を含む構造体の内部でよく使用されます。パーサーがレクサーからトークンを返すためによく使用します。何かのようなもの:
struct token
{
int token_type;
union
{
char *s; /* For string or keyword tokens */
double f; /* For floating point tokens */
long i; /* For integer tokens */
} token_value;
};
上記の構造では、メンバー内で使用されるメンバーはtoken_value
メンバーに依存しtoken_type
ます。
ユニオンは、変数の 1 つのメンバーを設定して別のメンバーを読み取る、ユニオン内のデータを悪用することによっても使用できます。これは、たとえば、浮動小数点数を一連のバイトに変換するために使用できます。
お気に入り
union data
{
char data[sizeof(double)];
double value;
};
メンバーを設定することにより、型キャストやポインター演算を行わずvalue
に、値の個別のバイトを読み取ることができます。double
これは技術的には実装定義の動作であり、コンパイラが許可しない可能性があることを意味します。ただし、非常に一般的に使用されているため、現在のすべてのコンパイラで許可されています。