柔性数组

定义:结构中的最后一个元素允许是未知大小的数组,这就叫做『柔性数组』成员。

struct S1
{
	int num;
	char arr[];
};

柔性数组的特点:

  • 结构中的柔性数组成员前面必须有至少一个其他成员。
  • sizeof 返回这种结构大小不包括柔性数组的内存。
  • 包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。

柔性数组的使用:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//柔性数组
struct S1
{
	int num;
	char arr[];
};

int main()
{
	struct S1* p = (struct S1*)malloc(sizeof(struct S1) + 6);
	p->num = 100;
	int i = 0;
	for (i = 0; i < 6; i++)
	{
		p->arr[i] = 'a'+i;
	}
	for (i = 0; i < 6; i++)
	{
		printf("%c ", p->arr[i]);
	}

	//增加容量
	struct S1* ptr = realloc(p, 14);
	if (ptr != NULL)
	{
		p = ptr;
	}
	for (i = 0; i < 10; i++)
	{
		p->arr[i] = 'x';
	}
	for (i = 0; i < 10; i++)
	{
		printf("%c ", p->arr[i]);
	}

	free(p);
	p = NULL;

	return 0;
}

柔性数组的优势: 

  1. 方便内存释放:如果我们的代码是在一个给别人用的函数中,你在里面做了二次内存分配,并把整个结构体返回给用户,用户调用free可以释放结构体,但是用户并不知道这个结构体内的成员也需要free,不能指望用户来发现这个事。所以,如果我们把结构体的内存以及其成员的内存一次性分配好了,并返回给用户一个结构体指针,用户做一次free就可以把所有的内存给释放掉。
  2. 有利于提高访问速度:柔性数组在内存中开辟的是连续的内存,连续的内存有益于提高访问速度,也有益于减少内存碎片。

 

 


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值