0

以下代码打印 '2' 四次。为什么它从不打印'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;

第二个赋值覆盖a.

于 2012-08-24T14:30:32.610 回答
1

中的每个项目都union指向同一个位置。

最常见的用法union是这样的:

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

在此示例中,incoming_data是从文件中导入的数据,其中dataTypeID告诉您它是什么类型的数据。(有许多以这种方式优化空间的文件格式。)

于 2012-08-24T14:38:39.563 回答
1

union对其所有成员使用相同的内存。

因此,当您分配 时q.b = 2;q.a也将是2

于 2012-08-24T14:30:25.510 回答