以下代码打印'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;
}
答案 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
告诉您它是什么类型的数据。 (有许多文件格式以这种方式优化空间。)