这是一个非常少见的知识点
1.定义
结构体中最后一个元素允许是未知大小的数组,这个数组的大小是柔性可变的,这就叫做 柔性数组成员。柔性数组成员一定在结构体里面有以下两种写法:
2.特点
我们可以看到,计算包含柔型数组成员的结构体的大小的时候,不包含柔性数组成员。
3.使用方法
我们在创建 含柔性数组成员的结构体变量的时候,可千万 不能像这样创建
而是应该这样创建:
typedef struct frou1
{
int i;
int* pa;
}f1;
f1* ps = (f1*)malloc(sizeof(f1) + 10 * sizeof(int));
我们还有一种方法可以创建出柔性数组的效果。
f1* ps = (f1*)malloc(sizeof(f1));
ps->pa = (int*)malloc(10 * sizeof(int));
这个的意思就是这样:
相较于使用柔性数组,这种创建的方法更繁琐
柔性数组只需要free一次,而这种方法需要free两次。
而且还要注意free顺序的问题:必须先free指针的,再free结构体。(因为如果先free结构体的话,就找不到指针指向的空间了。)
柔性数组开辟的是一次开辟而且连续,而这种方法开辟的空间过于零碎。零碎可能会导致浪费内存的事情,也会导致访问效率变低