使用union变量分配两个值

Vai*_*hav 1 c unions

变量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.

Ale*_*eys 6

union将所有列出的成员叠加在一起(尽管有些可能比重叠的初始部分延伸得更远),因此分配给.a或者.b正在写入相同的内存部分.考虑到这一点,输出应该是有意义的.

struct如果您期望输出为10,那么您可能正在考虑行为.

在真正扭曲的场景中,可以将不同值的部分同时存储在并集中,但通常会部分覆盖的值被认为是损坏的.例如,这个:

union {
    char a;
    struct { char ba; char bb; } b;
} s;
Run Code Online (Sandbox Code Playgroud)

可以存储s.as.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是在原子使用.