c - c struct size with void * value members
问题描述
我在 C 中有一个这样的结构:
struct ll {
struct ll * next;
void *value [];
}
当我 printf 的大小为struct ll
asprintf("sizeof ll:%d\n", sizeof(struct ll));
时,为什么结果是 8?
是什么意思void *value[]
?
解决方案
该value
字段是一个灵活的数组成员。它被定义为一个未指定大小的数组,void *
作为结构的最后一个成员。
C 允许这样做,以便您可以为结构分配空间以及数组的元素数量。因此,结构的大小不包括灵活数组成员。这就是结构的大小为 8 的原因,因为它只包含next
成员。
假设您希望此结构的实例value
包含 10 个元素。然后,您将按如下方式分配它:
struct ll *inst = malloc(sizeof(struct ll) + (sizeof(void *) * 10));
推荐阅读
- android - Android 应用程序中的单例类或扩展 ThreadPoolInstance 的应用程序
- amazon-web-services - AWS 使用 Cloudfront 增强托管性能
- python - pyplot:在轴上添加点投影
- flutter - 如何用颤动的条子做动画切换器
- android - 我的设备脱机并显示脱机反应本机但已连接到笔记本电脑
- php - Laravel Livewire 计算器/键盘,提高输入显示速度
- python - discord.py:隐藏所有其他用户的消息,但@提及用户
- c# - Try...catch 在执行存储过程时不起作用
- java - 如何编写自定义比较器以使用 SimpleEntry 对树集进行排序?
- algorithm - 这个大 O 评估是否正确?