1

このリンクを読みました what-is-the-point-behind-unions-in-c しかし、この答えは私には十分に見えません。

ユニオンの使用についてもっと説明してもらえますか。これには最大4バイトかかります(floatは4バイトを占有します)などのメモリ関連の例は必要ありません。

union un{
    char ch;
    int iNum;
    float fNum;
};

だから私の質問は、

ユニオンの正確な使用は何ですか?

なぜこれが必要なのですか?

私を助けてください、それは私を混乱させます。ありがとう。

4

2 に答える 2

3

おそらく、共用体の最も一般的な 2 つの用途は次のとおりです。

于 2013-09-18T15:01:44.397 に答える
1

a 、またはa 、または...のいずれかになる変数があるとよいでしょう。charint

これは、共用体の実際の型を含む構造体の内部でよく使用されます。パーサーがレクサーからトークンを返すためによく使用します。何かのようなもの:

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これは技術的には実装定義の動作であり、コンパイラが許可しない可能性があることを意味します。ただし、非常に一般的に使用されているため、現在のすべてのコンパイラで許可されています。

于 2013-09-18T14:59:49.673 に答える