c语言中的柔性数组

本文介绍了C语言中的柔性数组,这是一种允许结构体中数组大小未知的特性。柔性数组的特点包括其在结构体中的位置、如何通过malloc分配内存以及其相对于普通指针数组的优点。柔性数组在内存管理上更方便,释放时可以直接free,而使用指针则可能需要额外的释放步骤。此外,由于其内存连续性,柔性数组在读取速度上也有所优势。
摘要由CSDN通过智能技术生成

骚年,是否没有听说过柔性数组?那就来看看吧,增加增加内功(装大佬的资本)

目录

 定义与特点

定义:

特点:

柔性数组的替身

柔性数组的优点

 定义与特点

定义:

在结构体中的最后一个数组的大小可以未知(或为0),即数组大小可变

表现为:

struct st
{
	int a;
	int b;
	int arr[];//或者int arr [0];
};

特点:

1.想使用柔性数组,结构体中柔性数组前至少要有1个结构体成员

struct st
{
	int a;//必须存在一个成员
	int arr[];
};

2.使用sizeof计算其结构体大小时不包括柔性数组的大小

3.有柔性数组的结构体用malloc()来分配动态内存,并且所开空间应大于结构体大小,多余的空间给与柔性数组

struct st
{
	int a;
	int arr[];
};
int main()
{
	struct st* p1=(struct st*)malloc(90);
//开辟一块空间给st,大小为90字节,首地址用p接收,但此写法arr的大小不明确,不推荐!
	struct st* p2 = (struct st*)malloc(sizeof(struct st)+40);
//此写法方便判断arr大小为10个元素,增加可读性
	return 0;
}

注意:使用free释放(合格的程序猿要养成好习惯)

	free(p1);
	free(p2);
	p1 = NULL;
	p2 = NULL;

柔性数组的替身

使用int*arr来代替arr[](解释:因为int*arr为指针,可接收地址,可将动态开辟的数组空间的首地址传给arr

具体展示

struct st
{
	int a;
	int* arr;
};
int main()
{
	struct st* p = malloc(sizeof(struct st));
	p->arr = malloc(40);

此方法亦可开辟可变空间的数组

柔性数组的优点

先说两者不同(如图):

1.内存位置不同

2.所需要的指针数不同(方便程度不同)

 所以:

 1.方便释放

如果直接free(p),柔性数组可以释放干净,而第二种方法可能释放不干净,需要先free(p2->arr)后再free(p)

2读取更快

缓存区一次读取的内存池是连续的,如果连续储存只需读取一次,如果分开存储可能需要多次读取

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值