1、柔性数组的定义
C99 中,结构中的最后一个元素允许是未知大小的数组,
这就叫做『柔性数组』成员。
2、柔性数组的特点
3、柔性数组的使用
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
struct uion
{
char i;//对齐数为1
int c;//对齐数为4
//大小为1+3+4=8
int arr[];//未知数组大小
};
int main()
{
//printf("%zd", sizeof(struct uion));
struct uion* ptr=(struct uion*)malloc(sizeof(struct uion) + 20);
if (ptr == NULL)
{
perror("malloc");
return 1;
}
int i = 0;
for (i = 0; i < 5; i++)
{
ptr->arr[i] = i;
}
for (i = 0; i < 5; i++)
{
printf("%d ", ptr->arr[i]);
}
//若空间不够开始扩展
struct uion* pc=(struct uion*)realloc(ptr, sizeof(struct uion) + 40);
if (pc != NULL)
{
ptr = pc;
}
else
{
perror("realloc");
return 1;
}
free(ptr);
ptr = NULL;
return 0;
}
4、柔性数组的模拟使用
typedef struct uion
{
char i;
int c;
int* date;
}uion;
int main()
{
int i = 0;
uion* pc = (uion*)malloc(sizeof(uion));
if (pc == NULL)
{
perror("malloc1");
return 1;
}
pc->i = 'w';
pc->c = 1;
pc->date = (uion*)malloc(20);
if (pc->date == NULL)
{
perror("malloc2");
return 1;
}
for (i = 0; i < 5; i++)
{
pc->date[i] = i;
}
for (i = 0; i < 5; i++)
{
printf("%d ", pc->date[i]);
}
//空间不够,扩展
uion* ptr = (uion*)realloc(pc, 40);
if (ptr != NULL)
{
pc = ptr;
}
else
{
perror("realloc");
return 1;
}
free(pc->date);
pc->date = NULL;
free(pc);
pc = NULL;
return 0;
}