отображение памяти для Union - PullRequest
1 голос
/ 02 мая 2020
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 отображаются в одну и ту же область памяти, но почему b по-прежнему равен 0,5 после назначения 999999999 для a.

1 Ответ

1 голос
/ 02 мая 2020

Причина в том, что их разные типы данных разделяют их. Ваш код union определяет a как целое число и b как двойное, а значение b остается неизменным даже после того, как он имеет те же адреса памяти. Если вы установите a как double или b как integer, вы получите значения, измененные вместе ..

Посмотрите на следующее:

union Data {
    int a;
    int b; // changed double to int

    Data() {
        a = 1;
        b = 0.5;
    }
};

Надеюсь, это поможет вам понимать.

...