#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//C99中,结构中最后一个元素允许是未知大小的数组,这就叫做柔性数组成员
//
//typedef struct
//{
// int n;
// int arr[0];//这里的a就是柔性数组成员
//}type_a;
//int main()
//{
// //柔性数组的特点
// // 计算结构体大小时,只计算柔性数组前的成员的大小
// //
// int sz = sizeof(type_a);
// printf("%d", sz);
// //包含柔性数组的结构体,应使用malloc去开辟内存空间,并且开辟空间的大小要大于柔性数组的大小
// //柔性数组的使用
// type_a* ps = (type_a*)malloc(sizeof(type_a)+40);
// //其他成员的大小,以及给柔性数组成员的空间
// if (ps == NULL)
// {
// return 1;
// }
// ps -> n = 100;
// int i = 0;
// for (i = 0;i < 10;i++)
// {
// ps->arr[i] = i;
// }
// for (i = 0;i < 10;i++)
// {
// printf("%d ", ps -> arr[i]);
// }
// type_a* ptr = (type_a*)realloc(ps, 80);
// if (ptr != NULL)
// {
// ps = ptr;
// ptr = NULL;
// }
// free(ps);
// ps = NULL;
// return 0;
//}
struct S
{
int n;
int* arr;
};
int main()
{
struct S* ps = (struct S*)malloc(40);
if (ps == NULL)
{
return 1;
}
ps->n = 100;
ps->arr = (int*)malloc(40);
if (ps->arr == NULL)
{
return 1;
}
//使用
int i = 0;
for (i = 0;i < 10; i++)
{
ps->arr[i] = i;
printf("%d", ps->arr[i]);
}
//扩容
int* ptr = (int*)realloc(ps -> arr, 100);
if (ptr == NULL)
{
return 1;
}
//释放
free(ps ->arr);
free(ps);
ps = NULL;
return 0;
}
//使用柔性数组,则内存使用连续,读写速度更快
//malloc次数越多,形成内存碎片的几率越大