我正在学习C语言并尝试学习一些关于Structs的知识,我在下面有这个例子,我试图看看结构内存分配是如何组成的。我已经知道结构中的每个字段都是单词化的,这样如果没有足够的内存,就会有空的内存空间,应该在示例中看到,但是编译器给了我一些错误,比如 类型说明符缺失 , 预期' , 类型名称请求说明符或限定符 。怎么会?
#include <stddef.h>
#include <stdio.h>
typedef struct
{
char name[25];
int id;
int year;
char material;
} Student;
int
main(void)
{
Student talu;
printf("Size of tAlu %d\n", (int)sizeof(talu));
printf("name size is %d\n", offsetof(talu, name));
printf("id size is %d\n", offsetof(talu, id));
printf("year size is %d\n", offsetof(talu, year));
printf("material size is %d\n", offsetof(talu, material));
return 0;
}
答案 0 :(得分:3)
这是因为你忘记了结束括号:
char name[25];
// ^^^ !
答案 1 :(得分:3)
你错过了一个支架。
char name[25;
应为char name[25];
。
答案 2 :(得分:1)
我也尝试编译你的代码并得到错误,所以我最终解决了这个问题:
#include <stddef.h>
#include <stdio.h>
typedef struct
{
char name[25];
int id;
int year;
char material;
} Student;
int
main(void)
{
printf("Size of tAlu %d\n", (int)sizeof(Student));
printf("name size is %d\n", offsetof(Student, name));
printf("id size is %d\n", offsetof(Student, id));
printf("year size is %d\n", offsetof(Student, year));
printf("material size is %d\n", offsetof(Student, material));
return 0;
}
这是使用GCC作为编译器。
答案 3 :(得分:0)
offsetof()
取成员的偏移量应计算为第一个参数。
阅读手册有帮助。
答案 4 :(得分:0)
OFFSETOF(3):“宏offsetof()
从结构类型的开头返回字段成员的偏移量。”
未报告字段的大小,但报告它们在结构中的位置,offsetof()
使用的原因是:
“组成结构的字段的大小可能因实现而异,编译器可能会在字段之间插入不同数量的填充字节”。