#include <stdio.h>
#pragma pack(1)
typedef struct
{
char name[10];
int age;
int class;
char grade;
}stud_s;
int main(void)
{
stud_s s1= {"john" ,10, 10, 'A'};
printf("%ld \n",sizeof(stud_s));
return 0;
}
在上面的结构中,名称保留10个字节。名称“john”是4个字节,因此当我使用#pragma
时,结构的大小应该是13.而不是大小导致19个字节。谁能看看我的代码?任何帮助将不胜感激。
答案 0 :(得分:0)
你对pragma pack
的作用感到有些困惑。它不关心特定的实例化,而是关于元素之间的填充。
让我们看一个更简单的对象:
struct obj {
uint64_t x;
uint32_t y;
};
通常,此对象将采用 16字节。如果您使用pragma pack(1)
,则只会使用 12字节。
答案 1 :(得分:0)
在C中,无法定义包含数组的结构,该数组的大小取决于初始化程序的内容。您可以使用C99灵活数组成员,但是您必须使用malloc
分配结构。
在C ++中,您可以使用模板和继承做一些聪明的事情,但是name
成员不会成为基类型的一部分,这会很不方便。
#pragma pack
两种情况都没有帮助。该公共扩展仅删除结构字段之间的填充。