代码改变世界

C语言柔性数组详解

2018-06-03 15:20  maoypeng  阅读(643)  评论(0编辑  收藏  举报

柔性数组

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

因为在定义这个结构体的时候,模子的大小就已经确定不包含柔性数组的内存大小。柔性数组只是编外人员,不占结构体的编制。只是说
在使用柔性数组时需要把它当作结构体的一个成员,仅此而已。再说白点,柔性数组其实与
结构体没什么关系,只是“挂羊头卖狗肉”而已,算不得结构体的正式成员