【发布时间】:2020-10-22 19:32:16
【问题描述】:
我的代码:
#include<stdio.h>
union U{
int x;
char y;
};
int main()
{
union U u1;
u1.x = 258;
u1.y = '0';
printf("%d%d",u1.x,u1.y);
return 0;
}
奇怪的是,输出是30448。
有人能解释一下这是怎么发生的吗?
【问题讨论】:
-
你期待什么?
-
它只能读取已分配的联合的最后一个成员。
-
还要注意
'0'与0不是一回事,这可能是您混淆的一个因素。 -
这是未定义的行为,但发生了某事。
258是十六进制的102,所以在写入后四个字节包含02 01 00 00(小端序)。然后用'0'覆盖第一个字节,即十六进制30。所以这四个字节现在是30 01 00 00,而十六进制130是十进制304。但是因为没有输出空格,所以下一个值 hex30decimal48跑进去了,输出304 48显示为30448。 -
这能回答你的问题吗? Purpose of Unions in C and C++