柔性数组
定义
在至少两个成员的结构体中,最后一个成员其类型若是不完整类型的数组类型,则该成员称为柔性数组
注意
- 结构体中的柔性数组成员前面必须至少含有一个别的类型的成员
- sizeof返回的结构体的大小不包含柔性数组的大小
- 包含柔性数组成员的结构体的大小用malloc函数动态分配内存,并且分配的内存大小应该大于结构体的大小,以适应柔性数组的预期大小
- 好处
① 方便内存释放
② 有利于访问速度 - 两种形式的定义(以第二种常见,因为第一种方式可能编译器不支持)
① 用带有零下标的方式
② 用没有柔性数组下标的形式typedef struct tagData { int key; int flexiableArray[0]; } DATA_S;
typedef struct tagData { int key; int flexiableArray[]; } DATA_S;
说明
注③:如果不用malloc 来进行分配,如果禁用静态数组的方式进行分配,结果如下图。
练习
- 写一个结构体变量创建函数,用于创建一个带有柔性数组成员变量的结构体变量