我写了这个简单的程序来检查union变量的内存表示。
int main()
{
short s=0x7080;
union{
char c;
short s;
}un1={s};
printf(" %#X",un1.s);
return 0;
}
输出:0X80
un1 0x0045FE3C 80 00
的内存表示。我原以为0x0045FE3C 80 70
为什么变量s
没有保留'80 70'
?
答案 0 :(得分:4)
为什么变量不能保持'80 70'?
因为您初始化了c
,而不是s
。初始化假定您设置第一个元素,所以
un1 = {s};
表示“将s
转换为char
,然后将其分配给un1.c
,因为c
是union
的第一个元素。
如果要将其分配给s
,请使用指定的初始值设定项:
un1 = {.s = s};
Demo.(按预期打印0X7080
。)