为什么灵活的数组成员必须在struct的末尾但是具有灵活数组的struct不是?

时间:2016-08-15 16:22:13

标签: c arrays struct

一些具有灵活数组的结构:

struct SomeArray { unsigned length; int array[]; };

此代码gcc(版本4.9.2)编译时没有错误:

struct s1{ unsigned length; SomeArray some_array; const char * string; } ss1;

这是如何工作的?

1 个答案:

答案 0 :(得分:1)

来自标准:

  

作为一种特殊情况,具有多个命名成员的结构的最后一个元素可能具有不完整的数组类型;这称为灵活数组成员。在大多数情况下,忽略灵活的数组成员。特别是,结构的大小就好像省略了柔性阵列构件一样,除了它可能有比尾部填充更多的尾随填充。

这似乎是忽略灵活数组成员的情况之一。因此,ss1.some_array的大小不包括ss1.some_array.array的空间。