gpt4 book ai didi

c - sizeof 用于具有 char c[0] 的结构

转载 作者:行者123 更新时间:2023-12-04 00:08:52 27 4
gpt4 key购买 nike

struct xyz {
int a;
int b;
char c[0];
};
struct xyz x1;
printf("Size of structure is %d",sizeof(x1));

输出:8为什么结构的大小不是 9 个字节?是不是因为声明的字符数组大小为0?

最佳答案

标准 C 中没有零长度数组,但许多编译器都允许使用它们。

这个想法是它们必须作为结构中的最后一个字段放置,但它们不占用任何字节。该结构用作内存中紧挨着它放置的数组的 header 。

例如:

struct Hdr
{
int a, b, c;
struct Foo foos[0]
};

struct Hdr *buffer = malloc(sizeof(struct Hdr) + 10*sizeof(Foo));
buffer->a = ...;
buffer->foos[0] = ...;
buffer->foos[9] = ...;

标准方法是创建一个大小为 1 的数组,然后从数组的长度中减去该 1。但即使是这种技术也是有争议的......

更多细节和类似的灵活数组成员this document .

关于c - sizeof 用于具有 char c[0] 的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18136530/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com