c++ - 联盟的内存映射

标签 c++ unions

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

我知道ab映射到相同的内存位置,但是在将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/

相关文章:

c++ - 错误 LNK2019 无法解析的外部符号 Tesseract OCR C++ 使用 VS 2015

c++ - 尝试将父指针动态分配给函数内的子项会导致段错误

c++ - David Lowe 的 SIFT——关于尺度空间和图像坐标的问题(奇怪的偏移问题)

c - 结构变量别名

c++ - 访问 union 的成员变量 : declared for uint64, 但想要 uint32 中的内容。 C++

c++ - Union 在内存中的存储

c++ - FMOD 不播放声音 C++

android - 支持 Android 的硬 float 的 OpenCV

c - C中 union 的初始化

c union 和位域