首页 > 试题广场 >

下面代码打印结果为()

[单选题]
下面代码打印结果为()
union package
{
char head;
int  body;
};
struct message
{
char id;
int  crc;
union package pack;
};

int main()
{
printf("size=%d\n",sizeof(struct message));
return 0;
}


  • 9
  • 10
  • 11
  • 12
char占一个字节,但由于内存对齐的原因,补三个空字节,int在VC下占四个字节,union按最长长度算也占4个字节,所以总共占12字节
发表于 2019-12-03 09:15:46 回复(0)
sizeof=12

发表于 2019-11-09 21:06:23 回复(0)
联合体union的大小是最大成员变量类型的大小,且是所有成员类型大小的整数倍;所以为int四个字节;
结构体struct的大小是各成员变量类型大小之和,但要算上偏移量,即每个成员相对首地址的偏移量是该成员大小的整数倍。
该结构体第一个成员为char:1个字节,第二个为int四个字节,根据内存对齐,操作系统会自动将之前的1个字节补全为四个字节,所以该结构体大小为4+4+4=12个字节。
发表于 2019-10-19 12:25:18 回复(0)