这段 C++ 代码中发生了什么?为什么 s.u.a = 20?

What is Happening in this C++ Code? Why s.u.a = 20?

我希望输出看起来像:10 20 10 20

但是输出是这样的:10 20 20 20

代码背后发生了什么?

#include <iostream>

using namespace std;

typedef struct sdata{
    int a;
    int b;
    union udata{
        int a;
        int b;
    }u;
}Data;

int main()
{
    Data s;
    s.a = 10;
    s.b = 20;
    s.u.a = 10;
    s.u.b = 20;
    cout << s.a << " " << s.b << " " << s.u.a << " " << s.u.b;
    return 0;
}

struct不同,union一次只能容纳一个成员。每个成员都从相同的内存地址开始,因此写入一个会影响另一个。

在这种情况下,您的联合有两个 int 类型的字段。因此,如果您设置一个,则另一个将包含完全相同的值。因此,当您将 s.u.b 设置为 20 时,它也会将 s.u.a 设置为该值。