零长度数组被允许在GNU C.它们是因为这是真的用于可变长度对象的报头的结构的最后一个元素是非常有用的。
代码:
struct line {
int length;
char contents[0];
};
struct line *thisline = (struct line *)malloc(sizeof (struct line) + this_length);
thisline->length = this_length;
我真的不明白他们有什么用这意味着:“这确实是一个可变长度的对象头结构的最后一个元素”。有人可以详细说明这句话吗?
我认为你通常不会回答问题:D(p.s.很好的问题) – Rizier123
标题是一个东西,是在一开始的东西。您拥有动态分配的可变内存量;在它的开头是你的普通结构字段(头部),剩余的内存就是数组。 –
问题是,你可以'malloc'获得比'struct line'更多的空间,然后使用'malloc'返回的内存是连续的这一事实,通过'thisline-> contents [i]引用该额外空间' 。 –