在C99中,结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员
限制条件是:
- 结构体中
- 最后一个成员
- 未知大小的数组
那么我们怎样写一个柔性数组呢
- typedef struct st_type
- {
- int i;
- int a[0];//柔性数组成员
- }type_a;
有些编译器会报错无法编译,可以改成:
- typedef struct st_type
- {
- int i;
- int a[];//柔性数组成员
- }type_a;
例如:
- typedef struct st_type
- {
- int i;
- int a[0];//柔性数组成员
- }type_a;
- printf("%d\n", sizeof(type_a));//输出结果是4

第一个好处是:方便内存释放
如果我们的代码是在一个给别人用的函数中,在里面做了二次内存分配并把整个结构体返回给用户,用户调用free可以释放结构体,但是用户并不知道这个结构体内的成员也需要free,所以我们把结构体的内存及其成员需要的内存一次性分配好,并返回给用户一个结构体指针,用户做一次free就可以把所有的内存释放掉
第二个好处是:有利于访问速度
连续的内存有益于提高访问速度,也有益于减少内存碎片