0

次のコードは、「2」を4回出力します。なぜ「1」が印刷されないのですか?誰かがここで何が起こっているのか正確に説明できますか?

#include <iostream>

int main () {

    union IntegersUnion {

        int a;
        int b;
    };

    IntegersUnion q;

    q.a = 1;
    q.b = 2;

    std::cout << "(*(&q.a)) = " << (*(&q.a)) << std::endl;
    std::cout << "(*(&q.b)) = " << (*(&q.b)) << std::endl;

    std::cout << "(*(&(q.a))) = " << (*(&(q.a))) << std::endl;
    std::cout << "(*(&(q.b))) = " << (*(&(q.b))) << std::endl;
    return 0;
}
4

3 に答える 3

3

Aunionはそのメンバー間でメモリを共有します。行うことによって:

q.a = 1;
q.b = 2;

2番目の割り当てはを上書きしaます。

于 2012-08-24T14:30:32.610 に答える
1

unionすべてのメンバーに同じメモリを使用します。

したがって、割り当てるとq.b = 2;、もq.aになり2ます。

于 2012-08-24T14:30:25.510 に答える
1

のすべてのアイテムunionは同じ場所を参照しています。

の最も一般的な使用法unionは次のようなものです。

struct {
    int dataTypeID;
    union {
        char char_here;
        int number_here;            
    }
} incoming_data;

この例でincoming_dataは、はファイルからインポートされたデータであり、ファイルdataTypeIDがどのような種類のデータであるかを示しています。(この方法でスペースを最適化する多くのファイル形式があります。)

于 2012-08-24T14:38:39.563 に答える