柔型数组的定义:
结构中最后一个元素允许是未知大小的数组,这个数组就是柔性数组。但结构中的柔性数组前面必须至少一个其他成员,柔性数组成员允许结构中包含一个大小可变的数组,sizeof返回的这种结构大小不包括柔性数组的内存。包含柔数组成员的结构用malloc函数进行内存的动态分配,且分配的内存应该大于结构的大小以适应柔性数组的预期大小。这种代码结构产生于对动态结构体的需求。
这里使用实现静态链表时的例子,下面的结构就是柔性数组。
// 结点结构体定义
typedef struct _tag_StaticListNode
{
unsigned int data; // data域用于存储数据
int next; // next域用于存储下一个元素在数组中的下标
} TStaticListNode;
// 静态链表结构体定义
typedef struct _tag_StaticList
{
int capacity;
TStaticListNode header; // 头结点
TStaticListNode node[]; // 结点(链表用指针实现,这里使用柔性数组)
} TStaticList;
以上代码想要实现的功能是:
想得到一个不定长的数组,用结构体来实现,在结构体中还有其他的成员——数组的容量和头结点。
柔性数组所要实现的就是以数组的方式访问内存,对于TStaticList这个结构体,,他的大小并不包括TStaticListNode node[];