1、柔性数组是什么
在C语言中,柔性数组成员(Flexible Array Member,简称FAM)是C99标准中引入的一种结构体成员,用于表示一个大小可变的数组。它是结构体的最后一个成员,不像普通的数组,没有固定的长度。这使得结构体能够以一种非常灵活的方式来处理可变长度的数组数据。
含有柔性数组成员的结构体的声明方式:
typedef struct Example {
int length;
int data[0];
}flexible_array;
或者
typedef struct Example {
int length;
int data[];
}flexible_array;
第一种方式有的编译器可能报错。
2、柔性数组成员的特点
- 必须是结构体的最后一个成员。
- 柔性数组成员之前必须有至少一个其他成员。
- 在结构体定义时,柔性数组成员不占用内存空间(其大小被声明为零或为空维度的数组)。
#include <stdio.h>
typedef struct Example {
int length;
int data[];
}flexible_array;
int main()
{
printf("%zu\n", sizeof(flexible_array));
return 0;
}
运行结果:
可以看到这里的结构体大小只有一个整形的大小,这时表明在结构体定义时,柔性数组是不占用内存空间的。
- 实际的数组大小是在运行时决定的,包含柔性数组的结构体在使用时使用动态分配,在分配时应大于结构体的大小,以适应该柔性数组的预期大小。
3、使用示例
使用malloc函数给柔性数组元素分配空间:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
typedef struct Example {
int length;
int data[]; // 柔性数组成员
} flex_array;
int main()
{
// 创建一个长度为10的柔性数组
int n = 10;
flex_array* array = (flex_array*)malloc(sizeof(fl