#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
//1、方便内存释放 2、减少内存碎片 3、提高内存访问速度
//柔性数组特点:
// 结构中的柔性数组成员前面必须至少有一个其他成员
//sizeof返回的这种结构大小不包括柔性数组的内存
//柔型数组:
struct S
{
int n;
int arr[0];//柔性数组成员
//int arr[]==int arr[0];
};
int main()
{
//struct S s;
//printf("%d\n", sizeof(s)); //结果为4
struct S* ps = (struct S*)malloc(sizeof(struct S) + 5 * sizeof(int));
ps->n = 100;
int i;
for (i = 0; i < 5; i++)
{
ps->arr[i] = i; //被赋值0 1 2 3 4
}
//重新调整开辟的动态内存空间
struct S* ptr = realloc(ps, sizeof(struct S) + 10 * sizeof(int));
if(ptr!=NULL) //开辟成功
{
ps = ptr;
}
for (i = 5; i < 10; i++)
{
ps->arr[i] = i;
}
for(i=0;i<10;i++)
{
printf("%d ", ps->arr[i]);
}
//释放
free(ps);
ps = NULL;
return 0;
}
//以下代码不用柔性数组实现柔性数组功能
//struct S
//{
// int n;
// int* arr;//柔性数组成员
// int arr[]==int arr[0];
//};
//int main()
//{
// struct S s;
// printf("%d\n", sizeof(s)); //结果为4
//
// struct S* ps = (struct S*)malloc(sizeof(struct S));
// if (ps == NULL)
// {
// return 0;
// }
//
// ps->arr = (int*)malloc(5 * sizeof(int));
// if (ps->arr == NULL)
// {
// return 0;
// }
//
// int i;
// for (i = 0; i < 5; i++)
// {
// ps->arr[i] = i; //被赋值0 1 2 3 4
// }
//
// 重新调整开辟的动态内存空间
// int* ptr = (int*)realloc(ps->arr,10 * sizeof(int));
// if (ptr != NULL) //开辟成功
// {
// ps->arr = ptr;
// }
//
// for (i = 5; i < 10; i++)
// {
// ps->arr[i] = i;
// }
// for (i = 0; i < 10; i++)
// {
// printf("%d ", ps->arr[i]);
// }
//
// 释放
// free(ps->arr);
// ps->arr = NULL;
// free(ps);
// ps = NULL;
// return 0;
//}