我在C语言中有一个这样的结构:
struct ll {
struct ll * next;
void *value [];
}
当我将struct ll
的大小打印为printf("sizeof ll:%d\n", sizeof(struct ll));
时,为什么结果为8?
void *value[]
是什么意思?
答案 0 :(得分:2)
makefile
字段是灵活数组成员。它被定义为value
的未指定大小的数组,它是结构的最后一个成员。
C允许这样做,以便您可以为结构分配空间,并为数组分配元素数量。因此,结构的大小不不包括灵活数组成员。这就是为什么该结构的大小为8的原因,因为它仅包含void *
成员。
假设您希望此结构的实例具有next
包含10个元素。然后,您将按以下方式分配它:
value
答案 1 :(得分:1)
dev
您声明一个带有struct ll {
struct ll * next;
void *value [];
};
指针和一个灵活数组成员的结构。
灵活的数组成员不会为结构增加任何大小,除非可能需要额外的填充。
大小struct ll *
是结构指针的大小。