所谓柔性数组就是未定义大小的数组:
int a[];
那么该如何应用未定义大小的特点取改变数组储存元素的个数呢?这里就用到了之前学到的动态内存的方法。现在结构体里有一个柔性数组
struct Test
{
int a;
int n[];
};
void main()
{
struct Test* t =(struct Test*) malloc(4 + 4 * sizeof(int));
t->a = 10;
for (int i = 0; i < 4; i++)
{
t->n[i] = i + 1;
}
for (int i = 0; i < 4; i++)
{
printf("%d\n", t->n[i]);
}
}
如果要增加数组元素的个数,用realloc函数改变动态内存的空间
struct Test
{
int a;
int n[];
};
void main()
{
struct Test* t =(struct Test*) malloc(4 + 4 * sizeof(int));
t->a = 10;
for (int i = 0; i < 4; i++)
{
t->n[i] = i + 1;
}
for (int i = 0; i < 4; i++)
{
printf("%d\n", t->n[i]);
}
int* pt = NULL;
//用realloc函数改变动态内存的大小
pt = realloc(t, 4 + 10 * sizeof(int));
if (pt != NULL)
{
t = pt;
}
for (int i = 0; i < 10; i++)
{
t->n[i] = i + 1;
}
for (int i = 0; i < 10; i++)
{
printf("%d\n", t->n[i]);
}
//释放内存
free(t);
free(pt);
t = NULL;
t = NULL;
}