文章目录
前言
本篇文章介绍c语言中的柔性数组。
一、柔性数组的介绍
1.1 柔性数组的定义
在定义一个结构体类型时,结构体的最后一个成员变量允许为一个没有大小的数组时,这个数组称为柔性数组。
注意点:柔性数组成员必须是结构体成员的最后一个成员
例如,下面定义一个拥有柔性数组的结构体类型
方式一:
struct S
{
int n;
int arr[0]; //数组大小未知,柔性数组
};
方式二:
struct S
{
int n;
int arr[]; //数组大小未知,柔性数组
};
二、柔性数组的使用
2.1 使用说明
- sizeof返回的包含柔性数组的结构体的大小时,返回值不包括柔性数组的大小。
- 包含柔性数组的结构体使用malloc()函数进行动态内存的分配,并且分配的内存大小应该大于结构体的大小,以适应柔性数组的预期大小。
- 可以使用realloc()函数修改柔性数组的大小。
2.2 结构体中的成员只包含一个柔性数组成员
结构体定义:
//结构体成员只存在柔性数组成员
struct Single_S
{
int arr[0];
};
使用malloc()为柔性数组分配空间
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
int main()
{
struct Single_S* ps = (struct Single_S*)malloc(20);
if (NULL == ps)
{
printf("%s\n", strerror(errno));
return 1;
}