一道C语言题目!(有关共用体)

来源:百度知道 编辑:UC知道 时间:2024/06/08 07:34:30
#include "stdio.h"

union memb
{
float v;
int n;
char c;
};

main()
{
union memb utag;
utag.v=36.7;
utag.n=18;
utag.c='T';
printf("%5.1f\n%d\n%c\n",utag.v,utag.n,utag.c);
}
#include "stdio.h"

union memb
{
float v;
int n;
char c;
};

main()
{
union memb utag;
utag.v=36.7;
utag.n=18;
utag.c='T';
printf("%5.1f\n%d\n%c\n",utag.v,utag.n,utag.c);
}
为什么结果是:
36.5
84
T

能不能具体解释一下怎样得出结果的!

共用体顾名思义,共有一块内存。内存大小为共用体各成员size最大的者。我的机子上是4个字节。utag.v=36.7; 后内存为:CD CC 12 42
utag.n=18; 后内存为12 00 00 00,utag.c='T'; 后内存为54 00 00 00。一系列赋值后内存中实际存放的是54 00 00 00(T),这块内存被按三种格式输出后为54 00 00 00
0.0
84
T
可能和楼主编译器环境不同,怀疑楼主机子float不是4个字节表示的。

问题很好回答,但解释起来却不那么简单,这涉及到各类型变量在内存中的存储方式
union中的变量共用一块内存,也就是只能存储一个变量,即最后被赋值的类型,在程序中为utag.c='T';其他的被覆盖
关于解释见楼上的回答应该是对的,但char类型应该不会覆盖那么多的字节