具有void*值成员的c结构大小

具有void*值成员的c结构大小,c,pointers,struct,C,Pointers,Struct,我在C中有这样一个结构: struct ll { struct ll * next; void *value []; } 当我将struct ll的大小打印为printf(“sizeof ll:%d\n”,sizeof(struct ll)),为什么结果是8 void*value[]的含义是什么 struct ll { struct ll * next; void *value []; }; 您可以使用struct ll*指针和灵活的数组成员声明一个结构

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

struct ll {
    struct ll * next; 
    void *value [];
}
当我将
struct ll
的大小打印为
printf(“sizeof ll:%d\n”,sizeof(struct ll)),为什么结果是8

void*value[]
的含义是什么

struct ll {
    struct ll * next; 
    void *value [];
};
您可以使用
struct ll*
指针和灵活的数组成员声明一个结构。 灵活数组成员不向结构添加任何大小,除了可能添加额外的填充


大小
8
是结构指针的大小。

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

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

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

struct ll *inst = malloc(sizeof(struct ll) + (sizeof(void *) * 10));

是的,你的回答是对的。