这段 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
设置为该值。
我希望输出看起来像: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
设置为该值。