定义
结构中最后一个元素允许是未知大小的数组,这个数组就是柔性数组。
注意点
1结构中的柔性数组前面必须至少一个其他成员,柔性数组成员允许结构中包含一个大小可变的数组。
2.sizeof返回的这种结构大小不包括柔性数组的内存。
3.包含柔数组成员的结构用malloc函数进行内存的动态分配,且分配的内存应该大于结构的大小以适应柔性数组的预期大小。
4.在C99中支持且c99中定义为例如char a[];不能定义为char a[0];,C89不支持
用法
typedef struct st_type
{
int i;
int a[0];
}type_a;
//会报错 C99不支持定义0个数组,只是某些编译器支持
改为
typedef struct st_type
{
int i;
int a[];
}type_a;
sizeof(type_a) = 4,说明柔性数组不占用空间,那往柔性数组中添加元素看看占不占用空间
如下
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Value
{
int v;
char a[];
};
int main(int argc, char *argv[])
{
Value *p = (Value*)malloc(sizeof(Value)+100*sizeof(char));
//(*p).a = "hello world";
memcpy(p->a,"hello world",12);//拷贝元素
printf("分配元素后柔性数组占用空间%d\n",sizeof(p->a));
printf("%s\n",p->a);
}