认识柔性数组

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来更改大小。


相关推荐
Navigator_Z1 小时前
LeetCode //C - 1209. Remove All Adjacent Duplicates in String II
c语言·算法·leetcode
码行山野赴时序归途4 小时前
算法效率的度量(上):时间复杂度中的对数思维
c语言·数据结构·算法
xiaobobo33305 小时前
c语言中的“柔性数组成员”(Flexible Array Member, FAM)
柔性数组·vla·宏定义·数组描述
单片机仿真设计5 小时前
【proteus仿真】基于 STM32 的智能垃圾桶设计(仿真图+程序)
c语言·stm32·stm32单片机·proteus·毕设·仿真
是隼人10 小时前
buuctf-pwn axb_2019_fmt32题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
老一岁10 小时前
c问题总结(2)
c语言·开发语言
奶茶树10 小时前
【C++】13. C++11新特性【上】
c语言·开发语言·c++·git·github
xys_67811 小时前
深挖C语言:动态内存管理
c语言·开发语言
wuminyu12 小时前
JDK21 FFM异步读取MSG_ZEROCOPY错误队列揭秘
java·linux·c语言·jvm·c++
拂拉氏12 小时前
【项目分享-知识讲解】 Linux第一个项目--进度条的实现与解析
c语言