认识柔性数组

1.柔性数组

在c99中,结构体中的最后一个元素允许是未知大小的数组,这就叫做-----柔性数组

cpp 复制代码
struct Class
{
	int num;
	char teacher[20];
	int a[];//柔性数组

}a1;

或者

struct Class
{
	int num;
	char teacher[20];
	int a[0];//柔性数组

}a1;

写法取决于编译器支持,在vs2022中两种写法都是支持的。

2.柔性数组的特点

结构中的柔性数组成员前面必须至少一个其他成员。

这是非法的。


sizeof 返回的这种结构大小不包括柔性数组的内存。

cpp 复制代码
#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

struct Class
{
	char c;
	       
	int num;

	int arr[];//柔性数组成员

};
int main()
{
	printf("%zd\n", sizeof(struct Class));

	return 0;
}

可见柔性数组特点的确如此。


包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小

在开辟8字节空间后我们再给柔性数组成员开辟12个字节。

cpp 复制代码
#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

struct Class
{
	char c;
	       
	int num;

	int arr[0];//柔性数组成员

}a1;
int main()
{
	struct Class* p = malloc(sizeof(a1) + 12);
	if (p == NULL)
	{
		perror("malloc");
		return 1;
	}

	//.......
	return 0;
}

相当于提前先默认开辟了3个整形空间给柔性数组arr。后续我们还可以使用calloc来更改大小。


相关推荐
3壹14 分钟前
单链表:数据结构中的高效指针艺术
c语言·开发语言·数据结构
knd_max2 小时前
C语言:内存函数
c语言
YLCHUP3 小时前
【联通分量】题解:P13823 「Diligent-OI R2 C」所谓伊人_连通分量_最短路_01bfs_图论_C++算法竞赛
c语言·数据结构·c++·算法·图论·广度优先·图搜索算法
特立独行的猫a4 小时前
C/C++三方库移植到HarmonyOS平台详细教程
c语言·c++·harmonyos·napi·三方库·aki
啟明起鸣11 小时前
【数据结构】B 树——高度近似可”独木成林“的榕树——详细解说与其 C 代码实现
c语言·开发语言·数据结构
XH华12 小时前
C语言第十三章自定义类型:联合和枚举
c语言·开发语言
草莓熊Lotso13 小时前
【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day13
c语言·开发语言·刷题·强化训练
刃神太酷啦14 小时前
Linux 常用指令全解析:从基础操作到系统管理(1w字精简版)----《Hello Linux!》(2)
linux·运维·服务器·c语言·c++·算法·leetcode
tju新生代魔迷1 天前
C语言宏的实现作业
c语言·开发语言
小莞尔1 天前
【51单片机】【protues仿真】基于51单片机宠物投食器系统
c语言·stm32·单片机·嵌入式硬件·51单片机·proteus