文章目录
- 前言
- 一、柔性数组
- 二、柔性数组的特点
- 三、柔性数组的使用
- 总结
前言
C语言柔性数组、柔性数组的特点、柔性数组的使用等的介绍。
一、柔性数组
C99中,结构中的最后一个元素是允许未知大小的数组,这就叫做【柔性数组】成员。
struct S
{
int i;
int a[]; // 未知大小的数组,柔性数组成员
};
二、柔性数组的特点
- 结构中的柔性数组成员前面必须至少一个其他成员。
- sizeof 返回的这种结构大小不包括柔性数组的内存。
- 包含柔性数组成员的结构用malloc()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。
#include <stdio.h>
struct S
{
int i;
int a[];
};
int main()
{
printf("%d\n", sizeof(struct S)); // 4
// sizeof 不包括 柔性数组的大小
return 0;
}
三、柔性数组的使用
#include <stdio.h>
#include <stdlib.h>
struct S
{
int n;
int a[];
};
int main()
{
struct S* ps = (struct S*)malloc(sizeof(struct S) + 40);
// 开辟一块 4 + 40 个字节大小的空间,数组大小为40字节
if (NULL == ps)
{
// ....报错
return 1;
}
ps->n = 100;
// 柔性数组的使用
int i = 0;
for (i = 0; i < 10; i++)
{
ps->a[i] = i;
}
printf("%d\n", ps->n); // 100
for (i = 0; i < 10; i++)
{
printf("%d ", ps->a[i]);// 0 1 2 3 4 5 6 7 8 9
}
// 增容
struct S* str = (struct S*)realloc(ps, sizeof(struct S) + 80);
if (str != NULL)
{
ps = str;
str = NULL;
}
// 释放
free(ps);
ps = NULL;
return 0;
}
总结
C语言柔性数组、柔性数组的特点、柔性数组的使用等的介绍。