1.什么是柔性数组
柔性数组,必须使用动态内存管理才能使用
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
struct S2
{
int num;
int arr[];//柔性数组成员
};
struct S3
{
int num;
int arr[0];//柔性数组成员
};
//结构中的柔性数组成员前面必须至少一个其他成员
2.柔性数组的大小
int main()
{
printf("%d\n", sizeof(struct S3));//4
//sizeof返回的这种结构大小不包括柔性数组的内存
}
3.柔性数组的使用
int main()
{
//包含柔性数组成员的结构用malloc()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小;
struct S3* ps = (struct S3*)malloc(sizeof(struct S3) + 40);//希望数组放10个整形
if (ps == NULL)//如果申请内存失败
{
perror("malloc\n");
return 1;
}
//访问num
ps->num = 100;
//访问arr数组
int i;
//初始化arr数组
for (i = 0; i < 10; i++)
{
ps->arr[i] = i;
}
//打印arr数组
for (i = 0; i < 10; i++)
{
printf("%d ", ps->arr[i]);
}
//扩容
struct S3* ptr= (struct S3*)realloc(ps,sizeof(struct S3) + 80);//此时数组可以放30个整形
if (ptr == NULL)//如果申请内存失败
{
perror("realloc\n");
return 1;
}
ps = ptr;
//使用扩容好的空间
//......
free(ps);
ps = NULL;
}
4.柔性数组的好处
1.方便内存释放:一次free就可以把所有的内存都释放掉;
2.有利于访问速度:由于开辟的内存是连续的。