具有无效*值成员的c结构体大小

时间:2018-08-31 01:30:51

标签: c pointers struct

我在C语言中有一个这样的结构:

struct ll {
    struct ll * next; 
    void *value [];
}

当我将struct ll的大小打印为printf("sizeof ll:%d\n", sizeof(struct ll));时,为什么结果为8?

enter image description here

void *value[]是什么意思?

2 个答案:

答案 0 :(得分:2)

makefile字段是灵活数组成员。它被定义为value的未指定大小的数组,它是结构的最后一个成员。

C允许这样做,以便您可以为结构分配空间,并为数组分配元素数量。因此,结构的大小不不包括灵活数组成员。这就是为什么该结构的大小为8的原因,因为它仅包含void *成员。

假设您希望此结构的实例具有next包含10个元素。然后,您将按以下方式分配它:

value

答案 1 :(得分:1)

dev

您声明一个带有struct ll { struct ll * next; void *value []; }; 指针和一个灵活数组成员的结构。 灵活的数组成员不会为结构增加任何大小,除非可能需要额外的填充。

大小struct ll *是结构指针的大小。