柔性数组成员:
在结构体中,最后数组成员未指定大小。数组的大小可以调整,这个数组就称为柔性数组成员。
#include<stdio.h>
#include<malloc.h>
struct s
{
int a;
char arr[];// 柔性数组成员:在结构体中,最后数组成员未指定大小。数组的大小可以调整,这个数组就称为柔性数组成员
}; // char arr[0]; 方块零--这样写也可以。
int main(void) // malloc 次数越多,内存碎片越多,柔性数组碎片更少。
{
struct s* ps= (struct s *)malloc(sizeof(struct s) + 5 * sizeof(char));//动态开辟结构体大小。内存连续 访问效率高
ps->a = 100;
int i = 0;
printf("%d \n",sizeof(struct s));//4 不计算柔性数组的大小。
if (ps != NULL) //动态开辟的内存一定要检查是否为空指针。
{
for (size_t i = 0; i < 5; i++)
{
ps->arr[i] = i;
printf("%d \n", ps->arr[i]);
}
}
//动态追加内存arr。
struct s* ptr = (struct s*)realloc(ps,20);
if (ptr!=NULL)
{
ps = ptr;
}
for (size_t i = 0; i <15; i++)
{
ps->arr[i] = i;
printf("%d \n",ps->arr[i]);
}
printf("%d \n", ps->a);
free(ps);//释放内存
ps = NULL;
return 0;
}