c语言问题,,union相关,大家进!~(16.42)

来源:百度知道 编辑:UC知道 时间:2024/05/24 08:11:11
union st
{int a;
char b;
}
main()
{ union st s;
char *p=(char*)&s;
s.a=0x3132;
s.b=0x33;
printf("%c",*p);
}
A.1
B.2
C.3
D.不确定
大家先写出答案再分析!~
能写出流程,详细明了的我会加分感谢!~
(在我提的问题中还有其他未解决的问题,大家有兴趣得分或是好心帮忙解决的,可以点击我的名字进入我的提问进去看看,我为解决我的问题,都已经花了几百积分了!~)

union是定义共用体结构的,顾名思义,就是几种变量共用一个内存空间。
union st
{int a;
char b;
}
这样的定义就是,在一块内存空间里,可以存放一个int类型或存放一个char类型,这里要注意:是“或”。也就是,在同个时间里这个结构里只能是其中一种类型。
比如:
s.a=0x3132; //执行完这句之后,内存里放的是0x3132
s.b=0x33; //再执行完这句后,内存里存放的是0x33了,原来的0x3132已经给覆盖掉了。
所以,楼主题目里的答案是取最后赋值的那个就是了,答案也就使c,0x33就是字符'3'。
定义一个union结构后,系统分配的空间是按最大的那个类型来分配的。
如上例,int类型是2字节,char类型是1字节,那么st的空间是2字节.

C. st的大小=SIZEOF(INT) S.B会覆盖S.A的值 所以S内容是0X3332

答案为C
分析:
s.b=0x33覆盖了s中的低位,因此输出为3

C
s.a=0x3132;s中为0x3132(存储低位在前,高位在后)
再执行s.b=0x33;s中为0x3133(修改前面的低位)
当打印p指向的第一个字符(第一个字节,也就是低位)时是0x33也就是0110011,ASCII码中表示字符3。