概念
柔性数组( flexible array )C99 中,结构中的最后一个元素允许是未知大小的数组,这就叫做『柔性数组』成员。
特点
- 结构中的柔性数组成员前面必须至少一个其他成员。
- sizeof 返回的这种结构大小不包括柔性数组的内存。
- 包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大 小,以适应柔性数组的预期大小。
大小不包括柔性数组
typedef struct st_type
{
int i;
int a[0];//柔性数组成员
}type_a;
printf("%d\n", sizeof(type_a));//输出的是4
使用柔性数组应该对内存分配
type_a* pa = (type*)malloc(sizeof(type_a) + sizeof(int)*100);
//相当于对pa分配内存,给int a[] 分配了100byte
//执行代码
free(pa);//释放分配的内存
优点
第一个好处是: 方便内存释放如果我们的代码是在一个给别人用的函数中,你在里面做了二次内存分配,并把整个结构体返回给用户。用户调用free 可以释放结构体,但是用户并不知道这个结构体内的成员也需要 free ,所以你 不能指望用户来发现这个事。所以,如果我们把结构体的内存以及其成员要的内存一次性分配好 了,并返回给用户一个结构体指针,用户做一次free 就可以把所有的内存也给释放掉。
第二个好处是: 这样有利于访问速度 .连续的内存有益于提高访问速度,也有益于减少内存碎片。