结构中的最后一个元素容许是未知大小的数组,这就叫作柔性数组(flexible array)成员(也叫伸缩性数组成员),但结构中的柔性数组成员前面必须至少一个其余成员。柔性数组成员容许结构中包含一个大小可变的数组。柔性数组成员只做为一个符号地址存在,并且必须是结构体的最后一个成员,sizeof返回的这种结构大小不包括柔性数组的内存。柔性数组成员不只能够用于字符数组,还能够是元素为其它类型的数组。包含柔性数组成员的结构用malloc()函数进行内存的动态分配,而且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。
形如:数组
typedef struct var_array { int i; char data[]; }Var_a
须要说明的是:C89不支持这种东西,C99把它做为一种特例加入了标准。可是,C99所支持的是incomplete type,而不是zero array,形同int a[0];这种形式是非法的,C99 支持的形式是形同int a[];只不过有些编译器把int a[0];做为非标准扩展来支持,并且在C99 发布以前已经有了这种非标准扩展了,C99 发布以后,有些编译器把二者合而为一了。ide