柔数组简单介绍
这个词你可能没有听过但是他的确是存在的。
1.在c99中结构中的最后⼀个元素允许是未知⼤⼩的数组,这就叫做『柔性数组』成员
2这就代表了它存在与结构体中,很重要的一点是,他只能是结构体的最后的一个成员,这是为了方便柔数组的大小发生变化,
柔数组的的大小是可以发生变化的,就代表他需要去自己开辟空间和调整空间,这就要用到我们的动态内存开辟空间的函数malloc,calloc, realloc(这个用来调整空间的)。
柔数组的数组长度是可以不给定的,
柔数组的特点:
- 柔数组的前面必须要有至少一个成员变量
- sizeof 返回的这种结构⼤⼩不包括柔性数组的内存
- 包含柔数组的结构体用malloc分配空间时,大小应该大于结构体本身的大小,这是为了适应柔数组的大小,
下面是sizeof去计算这个结构体的大小。
柔数组的使用
因为我们的柔数组要动态开辟空间,所以需要我们定义一个结构体指针来使用,那么戒应用就只能用(->)这个符号来访问里面的成员。
例如:
#include <stdio.h>
#include <stdlib.h>
struct st_type
{
int i;
int a[];//柔性数组成员
};
int main()
{
struct st_type *s;
//创建柔数组
s=(struct st_type*)malloc(sizeof(struct st_type)+sizeof(int)*10)//数组里面存10个整数。
//空间的大小可以按照自己的需求来定。
int i;
for(i=0;i<10;i++)
{
s->a[i]=i+1;
}
for(i=0;i<10;i++)
{
printf("%d",s->a[i]);
}
return 0;
}