c语言——柔性数组


前言

c99中,结构体中的最后一个元素是未知大小的数组,这就叫做柔性数组成员。
使用柔性数组会得到一块连续的内存,连续的内存有益于提高访问速度,也有益于减少内存碎片。
柔性数组也需要使用动态内存函数来开辟内存


提示:以下是本篇文章正文内容,下面案例可供参考

1. 柔性数组

方式:

typedef struct st_type
{
	int i = ;
	int a[0];	柔性数组成员
}type_a;

报错修改为:

typedef struct st_type
{
	int i = ;
	int a[];	柔性数组成员
}type_a;

1.1 柔性数组的特点和使用

  • 结构体中柔性数组成员前必须有个其他成员
  • sizeof 返回结构体大小不包括柔性数组的内存。
    在这里插入图片描述
  • 包含柔性数组的结构体应该使用动态内存来开辟空间,并且分配的内存应该大于结构体的大小,以适应柔性数组的预期大小。
  • 见下方代码
  • 这也是柔性数组的使用方法
struct S
{
	int a;
	int arr[];	//柔性数组成员
};
int main()
{
	//给柔性数组成员分配空间
	//sizeof计算出结构体大小然后添加40个字节 4+40
	struct S* ps = (struct S*)malloc(sizeof(struct S) + 40);
	if (ps == NULL)
	{
		printf("%s\n",strerror(errno));
		return 1;
	}
	ps -> a = 100;
	int i = 0;
	//给柔性数组成员赋值
	for (i = 0; i < 10; i++)
	{
		ps->arr[i] = i;
	}
	//打印柔性数组成员内容
	for (i = 0; i < 10; i++)
	{
		printf("%d ", ps->arr[i]);
	}
	//怕内存不够在使用 realloc 扩容内存	4+80
	struct S* ptr = (struct S*)realloc(ps, sizeof(struct S) + 80);
	if (ptr != NULL)
	{
		//将ptr给ps后面就不用再次释放了
		ps = ptr;
		ptr = NULL;
	}
	//释放malloc和realloc开辟的内存并置空
	free(ps);
	ps = NULL;
	return 0;
}

总结

结构体里的成员数组和指针扩展知识

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值