柔性数组

C99及以上标准支持
标准示例如下:

typedef struct st_type
{
int i;
int a[];
}type_a;

初始大小为sizeof(i),0个元素的数组没有占用空间,而后我们可以进行变长操作了。
通过如下表达式给结构体分配内存:

type_a *p = (type_a*)malloc(sizeof(type_a)+100*sizeof(int));

但是这时候我们再用 sizeof(*p)测试结构体的大小,发现仍然为 4

因为在定义这个结构体的时候,模子的大小就已经确定不包含柔性数组的内存大小。

柔性数组只是编外人员,不占结构体的编制。
只是说在使用柔性数组时需要把它当作结构体的一个成员,仅此而已。
再说白点,柔性数组其实与结构体没什么关系,只是“挂羊头卖狗肉”而已,算不得结构体的正式成员

详细介绍请搜索

c99(C99 specification 6.7.2.1.16)中引入的 flexible array member