目录
柔性数组的概念以及定义
柔性数组的特点
柔性数组的使用
柔性数组的概念以及定义
概念:
C99中,结构中的最后一个元素允许是未知大小的数组,这就叫柔性数组成员
定义:
struct st_type
{
int i;
int a[0]; //柔性数组成员
};
当以上代码形式编译不通过时,可改为一下代码形式
struct st_type
{
int i;
int a[]; //柔性数组成员
};
柔性数组的特点
1. 结构中的柔性数组成员前面必须至少有一个其他成员
2. sizeof 计算的这种结构大小不包括柔性数组的内存
代码验证:
3. 包含柔性数组成员的结构用 malloc 函数进行内存的动态分配,并且分配的内存应该大于结构体的大小,以适应柔性数组的预期大小
代码演示:
#include<stdio.h>
typedef struct st_type
{
int i;
int a[0]; //柔性数组成员
}ST;
int main()
{
// 4 + 40
ST* s = (ST*)malloc(sizeof(ST) + sizeof(int) * 10);
return 0;
}
柔性数组的使用
代码演示:
#include<stdio.h>
#include<stdlib.h>
typedef struct st_type
{
int sz;
int a[0]; //柔性数组成员
}ST;
int main()
{
// 4 + 40
ST* s = (ST*)malloc(sizeof(ST) + sizeof(int) * 10);
// 判断是否开辟成功
if (s == NULL)
{
perror("malloc");
return -1;
}
// 赋值
s->sz = 10;
for (int i = 0; i < s->sz; i++)
{
s->a[i] = i;
}
// 打印验证
printf("%d\n", s->sz);
for (int i = 0; i < s->sz; i++)
{
printf("%d ", s->a[i]);
}
// 释放动态开辟的内存空间
free(s);
s = NULL;
return 0;
}
代码验证: