请大家帮忙运行下,该如何解决

请大家帮忙运行下
main()
{
struct   test
{
int   m1;   char   m2;   float   m3;
union   uu{   char   u1[5];   int   u2[2];}   ua;
}myaa;

printf( "%d\n ",   sizeof(struct   test));
}
这个是个小题目,看sizeof(struct   test)的结果,我觉得是16拉,答案是12,可我的机器运行结果是20,真是奇怪

------解决方案--------------------
i=0的时候,跳到case 0,一路向下执行下去:+2+3+5=10
i=1的时候,跳到case 1, 一路向下执行下去: +3+5=8
i=2....................................: +3+5=8
i=3....................................: +2+3+5=10
i=4............default ..................: +5=5

case后面不跟break的话,它会一直走遍下面所有的分支语句的。
------解决方案--------------------
int是2字节还是4字节,是cpu/操作系统决定的,C/C++相同。
在windows95之后,int就都是4字节的了。
TC2/BC31下int是2字节的,是因为它们其实跑在8086虚拟机模式下。
扔了你手里int还是2字节的所有工具或者资料吧,都是12年以前的东西了,早过时了。
------解决方案--------------------
第一道:应该是20

第二道:41
------解决方案--------------------
第一个考虑对齐
第二个考虑break
------解决方案--------------------

这个:

顺便还有这个 运行出来的结果居然是41,答案是31,晕了
main()
{
int a = 0, i;
for (i=0; i < 5; i++)
{
switch(i)
{
case 0:
case 3: a+=2;
case 1:
case 2: a+=3;
default: a+=5;
}
}
printf( "%d\n ", a);
}
a=(2+3+5)+(3+5)+(3+5)+(2+3+5)+5=41;

里面没有 break;这个的。