柔性数组:
 只存在于结构体中,而且还要是结构体的最后一个成员,并且在他的前面必须要有其他成员,
 大小是未知的,所以在用sizeof计算出的结构体大小是出柔性数组外的,
 
 柔性数组的大小是可以变化的,那么如何调整柔性数组的大小呢,
 想到调整大小我们就可以想到动态内存分配
 所以我们可以首先用malloc函数为柔性数组开辟一个动态内存,
 再用realloc函数调整空间大小
 
 想要实现这样的把结构体大小做调整的操作,除了在结构体中包含柔性数组外,我们还可以在结构体中包含指针
struct S {
	int a;
	int* arr;
};
int main()
{
	struct S* p=(struct S*)malloc(sizeof(struct S));//先定义一个结构体指针,并给开辟空间
	if (p == NULL)
	{
		perror("malloc->p");
		return 1;
	}
	p->arr = (int*)malloc(40);//然后再通过结构体指针找到arr指针,对arr指针指向的区域开辟空间
	if (p->arr == NULL)
	{
		perror("malloc->arr");
		return 1;
	}
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		p->arr[i] = i + 1;
	}
	for (i = 0; i < 10; i++)
	{
		printf("%d\n", p->arr[i]);
	}
	//调整
	int* pc=(int*)realloc(p->arr, 60);
	if (pc == NULL)
	{
		perror("realloc");
		return 1;
	}
	p->arr= pc;
	for (i = 0; i < 15; i++)
	{
		printf("%d\n", p->arr[i]);
	}
	//释放
	free(p->arr);
	p->arr = NULL;
	free(p);
	p=NULL;
	return 0;
}
原理图
 



















