首页 > 解决方案 > c struct size with void * value members

问题描述

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

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

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

在此处输入图像描述

是什么意思void *value[]

标签: cpointersstruct

解决方案


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

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

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

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

推荐阅读