具有void*值成员的c结构大小
我在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*指针和灵活的数组成员声明一个结构
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));
是的,你的回答是对的。