变量 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;
}
我执行了程序,得到了 20 作为输出。
最佳答案
union
将所有列出的成员叠加在一起(尽管有些可能比重叠的初始部分延伸得更远),因此分配给 .a
或 .b
正在覆盖内存的同一部分。考虑到这一点,输出应该是有意义的。
如果您期望输出为 10,您可能正在考虑 struct
的行为。
在非常扭曲的场景中,可以将不同值的部分同时存储在一个 union 中,但通常部分覆盖的值将被假定为已损坏。例如,这个:
union {
char a;
struct { char ba; char bb; } b;
} s;
可以同时存储s.a
和s.b.bb
,但是由于s.a
与s.b.ba
重叠,赋值s.a
踩踏 s.b.ba
,暗示所有 s.b
不再值得信赖。
通常用于存储不同类型的 union 会嵌入到一个结构中,该结构的第一个成员记录正在使用哪个 union 成员:
struct {
int type;
union {
char ch;
int n;
} datum;
} atom;
这里,type
可能包含一个枚举值,以指示 datum.ch
或 datum.n
是否在原子中使用。
关于c - 使用 union 变量分配两个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18306249/