取消引用指向union的成员的指针

时间:2012-08-24 14:29:36

标签: c++ pointers

以下代码打印'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;
}

3 个答案:

答案 0 :(得分:3)

A union在其成员之间共享内存。通过做:

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

第二个作业会覆盖a

答案 1 :(得分:1)

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

因此,当您指定q.b = 2;时,q.a也会2

答案 2 :(得分:1)

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

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

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

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