变量a由值10指定,变量b由20指定为union变量v.然后它给出a的输出是20而不是10.我没有得到它.
#include<stdio.h>
int main()
{
union var
{
int a, b;
};
union var v;
v.a=10;
v.b=20;
printf("%d\n", v.a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我执行了程序,输出为20.
union将所有列出的成员叠加在一起(尽管有些可能比重叠的初始部分延伸得更远),因此分配给.a或者.b正在写入相同的内存部分.考虑到这一点,输出应该是有意义的.
struct如果您期望输出为10,那么您可能正在考虑行为.
在真正扭曲的场景中,可以将不同值的部分同时存储在并集中,但通常会部分覆盖的值被认为是损坏的.例如,这个:
union {
char a;
struct { char ba; char bb; } b;
} s;
Run Code Online (Sandbox Code Playgroud)
可以存储s.a并s.b.bb在同一时间,但由于s.a重叠s.b.ba,分配给s.a重踏上s.b.ba,并暗示所有的s.b不再是值得信赖的.
通常,用于存储不同类型的联合会嵌入到一个结构中,该结构的第一个成员记录了正在使用的联合成员:
struct {
int type;
union {
char ch;
int n;
} datum;
} atom;
Run Code Online (Sandbox Code Playgroud)
在这里,type可能会包含一个枚举值指示是否datum.ch或者datum.n是在原子使用.