认识柔性数组

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


相关推荐
傻乐u兔3 小时前
C语言进阶————指针4
c语言·开发语言
历程里程碑3 小时前
Linux22 文件系统
linux·运维·c语言·开发语言·数据结构·c++·算法
2601_9491465310 小时前
C语言语音通知接口接入教程:如何使用C语言直接调用语音预警API
c语言·开发语言
知南x12 小时前
【Ascend C系列课程(高级)】(1) 算子调试+调优
c语言·开发语言
2的n次方_14 小时前
Runtime 执行提交机制:NPU 硬件队列的管理与任务原子化下发
c语言·开发语言
凡人叶枫15 小时前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发
凡人叶枫16 小时前
C++中输入、输出和文件操作详解(Linux实战版)| 从基础到项目落地,避坑指南
linux·服务器·c语言·开发语言·c++
傻乐u兔17 小时前
C语言进阶————指针3
c语言·开发语言
CodeSheep程序羊18 小时前
拼多多春节加班工资曝光,没几个敢给这个数的。
java·c语言·开发语言·c++·python·程序人生·职场和发展
I'mChloe19 小时前
PTO-ISA 深度解析:PyPTO 范式生成的底层指令集与 NPU 算子执行的硬件映射
c语言·开发语言