首页 > 试题广场 >

以下是C语言的一个struct声明#pragma pack(

[单选题]
以下是C语言的一个struct声明
#pragma pack(4)
typedef struct {
    int a;
    char b;
    int c;
    float e;
    char f;
    float g;
} stru;
问在32bits平台下,sizeof(stru) 为多少?
  • 22
  • 24
  • 28
  • 32
在此结构体中,所有数据类型在32位主机或者64位主机上无影响,另外#pragma pack(4)指定字节对齐为4;
数据类型    字节数    字节对齐
int                 4                4
char              1                4
int                 4                4
float              4                4
char              1                4
float              4                4
故sizeof的值应为24;
发表于 2018-03-29 16:13:17 回复(0)
更多回答
四个座位排排坐 一个座位一字节 坐不下的下一排 得:4x6
发表于 2022-07-20 02:10:47 回复(0)
算成3*8等于32了
发表于 2023-01-06 20:08:43 回复(0)
char 打肿脸撑胖子
发表于 2022-08-15 16:32:21 回复(1)
变量本身对齐值与指定对齐值比较,小的作为变量的对齐值,以多大值为准进行开辟空间也是这样
发表于 2021-02-05 14:13:24 回复(2)
对于标准数据类型,它的地址只要是它的长度的整数倍就行了,而非标准数据类型按下面的原则对齐:\n  \n  数组 :按照基本数据类型对齐,第一个对齐了后面的自然也就对齐了。\n
联合 :按其包含的长度最大的数据类型对齐。\n
结构体: 结构体中每个数据类型都要对齐。\n
比如有如下一个结构体:
\n  \n  struct stu{\n
 char sex;\n   
int length;\n   
char name[10];\n
};\n
struct stu my_stu;\n  \n  \n
由于在x86下,GCC默认按4字节对齐,它会在sex后面跟name后面分别填充三个和两个字节使length和整个结构体对齐。于是我们sizeof(my_stu)会得到长度为20,而不是15.
编辑于 2024-04-23 09:16:32 回复(0)