union Data {
int a;
double b;
Data(){
a = 1;
b = 0.5;
}
};
int main(){
Data udata;
udata.a = 999999999;
cout << udata.a << "\t" << udata.b << endl;
return 0;
}
result: 999999999 0.5
我知道
a
和b
映射到相同的内存位置,但是在将9999t9999分配给b
之后,为什么a
仍然等于0.5。
最佳答案
原因是它们的不同数据类型将它们分开。您的union
代码将a
定义为整数,并将b
定义为double,即使拥有相同的内存地址,b
的值仍保持不变。如果将a
设置为double或b
设置为整数,则值将一起更改。
请看以下内容:
union Data {
int a;
int b; // changed double to int
Data() {
a = 1;
b = 0.5;
}
};
希望它能帮助您理解。
关于c++ - 联盟的内存映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61557447/