c中柔性数组

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

柔性数组的特点

1.结构中柔性数组前必须至少有一个其他成员

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

3.包含柔性数组成员的结构用malloc函数进行动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小

4.柔性数组在结构体中只能存在一个

下面我们来介绍两种使用柔性数组的方法

法1

接下来是法2

法1的好处

1.如果我们的代码是在一个给别人用的函数中,你在里面做了二次内存分配 ,并把整个结构返回给用户,用户调用free可以释放结构体,但是用户并不知道这个结构体内的成员也需要free,所以你不能指望用户来发现这个事。所以,如果我们把结构体的内存以及其成员要的内存一次性分配好,并返回给用户一个结构体指针,用户做一次free就可以把所有也给释放掉。

2.这样有利于提高访问速度

连续的内存有益于提高访问速度,也有益于减少内存碎片。(其实,我个人觉得也没多高,反正你跑不了要用偏移量的加法来寻址)。

那么今天分享就到这里,谢谢大家!!!

相关推荐
奶黄小甜包6 小时前
C语言零基础第16讲:内存函数
c语言·笔记·学习
源远流长jerry14 小时前
OpenHarmony概述与使用
c语言·c++·鸿蒙系统
艾莉丝努力练剑14 小时前
深入详解C语言的循环结构:while循环、do-while循环、for循环,结合实例,讲透C语言的循环结构
c语言·开发语言·c++·学习
晨非辰15 小时前
#C语言——学习攻略:自定义类型路线--结构体--结构体类型,结构体变量的创建和初始化,结构体内存对齐,结构体传参,结构体实现位段
c语言·开发语言·经验分享·学习·其他·学习方法·visual studio
·白小白16 小时前
【数据结构】——栈(Stack)的原理与实现
c语言·开发语言·数据结构
KFCgrandpahhh17 小时前
从0开始跟小甲鱼C语言视频使用linux一步步学习C语言(持续更新)8.13
linux·c语言·学习
Rain_is_bad18 小时前
初识c语言————排序方法
c语言·开发语言·数据结构
一支闲人19 小时前
C语言相关简单数据结构:顺序表
c语言·数据结构·基础知识·适用新手小白
John.Lewis1 天前
数据结构初阶(11)排序的概念与运用
c语言·数据结构·排序算法
daiyanyun1 天前
Ubuntu 20.04 虚拟机安装完整教程:从 VMware 到 VMware Tools
linux·c语言·c++·ubuntu