柔性数组:
只存在于结构体中,而且还要是结构体的最后一个成员,并且在他的前面必须要有其他成员,
大小是未知的,所以在用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;
}
原理图