定义
结构体中有多个元素,最后一个元素未知大小的数组,这个数组就是柔性数组。
struct ST
{
int a;
char arr[];
}
//有的编译器支持以下形式
struct ST
{
int a;
char arr[0];
}
特点
结构体中,柔性数组成员前必须有其他成员
sizeof计算结构体大小时,最后的柔性数组成员不计算在内
包含柔性数组成员的结构体要用malloc动态内存分配,分配的内存要大于结构体大小,以适应柔性数组的预期大小
typedef struct st_type
{
int i;
int a[0];//柔性数组成员
}type_a;
printf("%d\n", sizeof(type_a));//输出的是
柔性数组的使用
typedef struct data
{
size_t size;
char arr[];
}data;
int main()
{
int n = 0;
scanf("%d", &n);
data* p = (data*)malloc(sizeof(data) + n * sizeof(char));
if (NULL == p)
return 1;
char a = 'a';
p->size = n;
for (int i = 0;i < 10;i++)
{
p->arr[i] = a;
a++;
}
free(p);
p = NULL;
return 0;
}