C++ 这个C++;密码?为什么s.u.a=20?

C++ 这个C++;密码?为什么s.u.a=20?,c++,struct,unions,C++,Struct,Unions,我希望输出像这样:10 但是输出是这样的:1020 代码背后发生了什么 #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

我希望输出像这样:
10

但是输出是这样的:
1020

代码背后发生了什么

#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;
}
#包括
使用名称空间std;
类型定义结构数据{
INTA;
int b;
乌达联盟{
INTA;
int b;
}u;
}数据;
int main()
{
数据挖掘;
s、 a=10;
s、 b=20;
s、 u.a=10;
s、 u.b=20;

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


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

我建议您阅读union的功能。您似乎正在使用它们,但希望它们的行为与struc一样ts.是什么让你相信它应该是
10