认识柔性数组

本文介绍了C99中的柔性数组概念,指结构体中最后一个元素可为未知大小的数组。柔性数组有特定要求,如需先有其他成员,sizeof不包括柔性数组内存。动态分配时需预留额外空间。展示了malloc和calloc在柔性数组管理中的应用。
摘要由CSDN通过智能技术生成

1.柔性数组

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

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

}a1;

或者

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

}a1;

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

2.柔性数组的特点

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

这是非法的。


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

#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个字节。

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


  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jamo@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值