柔性数组
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