c中柔性数组

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

柔性数组的特点

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

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

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

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

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

法1

接下来是法2

法1的好处

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

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

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

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

相关推荐
charlie11451419119 分钟前
现代嵌入式C++教程:C++98——从C向C++的演化(2)
c语言·开发语言·c++·学习·嵌入式·教程·现代c++
雨季余静24 分钟前
c语言 gb2312转utf-8,带码表,直接使用。
c语言·c语言utf8·c语言gb2312·c语言gbk·c语言gb18030·gb2312转utf8·gbk转utf8
2401_890443021 小时前
Linux 基础IO
linux·c语言
egoist20234 小时前
【Linux仓库】超越命令行用户:手写C语言Shell解释器,解密Bash背后的进程创建(附源码)
linux·c语言·bash·xshell·环境变量·命令行参数·内建命令
superman超哥7 小时前
仓颉语言中字典的增删改查:深度剖析与工程实践
c语言·开发语言·c++·python·仓颉
疑惑的杰瑞7 小时前
【C】常见概念
c语言·编译原理
yyy(十一月限定版)9 小时前
C语言——排序算法
c语言·开发语言·排序算法
黎雁·泠崖10 小时前
指针收官篇:sizeof/strlen + 指针运算笔试考点全梳理
c语言·开发语言
lingran__11 小时前
数据在内存中的存储详解(C语言拓展版)
c语言·开发语言
superman超哥11 小时前
仓颉语言中异常处理入门的深度剖析与工程实践
c语言·开发语言·c++·python·仓颉