这个东西比较冷门,但它的确存在,即使应用场景很少。
C99中,结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员;
但是,柔性数组前面必须至少有一个成员,而且sizeof返回的这种结构大小不包含柔性数组的内存;
包含柔性数组的结构用malloc()函数进行内存的动态分配,并且分配的内存大小应该大于结构的大小,以适应柔性数组的预期大小;
例如:
#include <stdio.h>
#include <Windows.h>
typedef struct st_type
{
int i;
int a[];
}type_a;
int main()
{
//柔性数组,结构体中最后一个元素允许未知大小的数组,这就叫做柔性数组。
int i = sizeof(type_a);
printf("%d\n", i);
system("pause");
return 0;
}
你会发现代码中定义了一个“a[ ]”,看着很奇怪,它就是柔性数组;
运行代码:
代码正常运行,且输出结果为4;
柔性数组值是编外人员,不占结构体的编制;
再看一段代码:
#include <stdio.h>
#include <Windows.h>
typedef struct st_type
{
int i;
int a[];
}type_a;
int main()
{
//柔性数组,结构体中最后一个元素允许未知大小的数组,这就叫做柔性数组。
int j = 0;
type_a *p = (type_a*)malloc(sizeof(type_a) + 100 * sizeof(int));
p->i = 10;
for (j = 0; j < 100; j++)
{
p->a[j] = j;
}
free(p);
p = NULL;
system("pause");
return 0;
}
动态申请一块内存,且在执行完命令进行内存释放时仅用释放一次就可以;