柔性数组
结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员
例如:
typedef struct st_type
{
int i;
int a[0];//柔性数组成员
}type_a;
此处的int a[0] 没有什么实际意义,若创建不成功,也可以换成a[]
由于结构体最后一元素创建的数组大小是未知的,所以在后续开辟的动态空间时,可以根据需求使用malloc函数和realloc函数给数组开辟指定大小的空间,增加了灵活性,故称之为柔性数组成员。
柔性数组特点:
1、结构中的柔性数组成员前面必须至少一个其他成员。
2、sizeof
返回的这种结构大小不包括柔性数组的内存。
3、包含柔性数组成员的结构用
malloc ()
函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。
实现增加按需求增加可控的数组空间
代码1中由于开辟出的空间包含整型i和数组,开辟出的内存空间地址由指针*p存储,过程中只用一次malloc函数,因此,释放空间的时候也只需要一次
代码2中利用指针*p存储指向开辟空间1的地址,空间1中存放整型i和整型指针*p_a,再利用整型指针*p_a指向开辟空间2的地址,空间2用于存储用户需要创建的数组空间大小。由于使用了malloc函数两次来开辟空间,因此,在释放空间的时候也得使用free函数释放两次。
代码1和代码2实现的功能相同,但代码1相比代码2的好处有:
1、方便内存释放
2、有利于访问速度