首页 > 试题广场 >

在32系统下输出的结果为( ...

[单选题]
在32系统下输出的结果为(      )
#include <stdio.h>

#pragma pack(2)
struct Test1
{
int a;
char b;
short c;
int *d;
}A;
#pragma pack()

#pragma pack(4)
struct Test2
{
int *d;
char b;
int a;
short c;
}B;
#pragma pack()

int main()
{
printf("%d,%d\n",sizeof(A),sizeof(B));
return 0;
}


  • 12,16
  • 13,13
  • 16,16
  • 其他几项都不对
#pragma pack(n)和#pragma pop() struct sample { char a; double b; }; 当sample结构没有加#pragma pack(n)的时候,sample按最大的成员那个对齐; (所谓的对齐是指对齐数为n时,对每个成员进行对齐,既如果成员a的大小小于n则将a扩大到n个大小; 如果a的大小大于n则使用a的大小;)所以上面那个结构的大小为16字节. 当sample结构加#pragma pack(1)的时候,sizeof(sample)=9字节;无空字节。 (另注:当n大于sample结构的最大成员的大小时,n取最大成员的大小。 所以当n越大时,结构的速度越快,大小越大;反之则)
发表于 2019-09-09 08:53:51 回复(0)
32位系统,你就看成存储单元是8个字节为一行来算,加前面的超过8个字节就得换下一行存储
,这一行自动补齐8个字节。
sizeof(A):
int a 占4个字节,然后char b占1个字节,现在加起来5个字节,然后存short c,short占2字节,
存储地址必须是2的倍数,所以中间空一个字节,从第6个字节开始存,现在加起来8个字节,
然后int *d占4字节,加起来12字节。
sizeof(B)类似。
发表于 2019-09-09 10:49:00 回复(0)