当前位置: 首页 > news >正文

认识柔性数组

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

限制条件是:

  1. 结构体中
  2. 最后一个成员
  3. 未知大小的数组

1.柔性数组的形式

那么我们怎样写一个柔性数组呢

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

有些编译器会报错无法编译,可以改成: 

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

2.柔性数组的特点

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

例如:

typedef struct st_type
{int i;int a[0];//柔性数组成员
}type_a;
printf("%d\n", sizeof(type_a));//输出结果是4

3.柔性数组的优势

第一个好处是:方便内存释放

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

第二个好处是:有利于访问速度

连续的内存有益于提高访问速度,也有益于减少内存碎片

http://www.lryc.cn/news/181642.html

相关文章:

  • 熔断、限流、降级 —— SpringCloud Alibaba Sentinel
  • python经典百题之反向输出数字
  • 复习Day08:哈希表part01:242.有效的字母异位词、349. 两个数组的交集、1. 两数之和、160. 相交链表
  • 用 Pytest+Allure 生成漂亮的 HTML 图形化测试报告
  • Python字符串索引解码乱码谜题
  • 协议栈——收发数据(拼接网络包,自动重发,滑动窗口机制)
  • 传输层协议——TCP、UDP
  • 优化您的Spring应用程序:缓存注解的精要指南
  • Java之原子性问题的解决
  • 实时目标检测:基于YOLOv3和OpenCV的摄像头应用
  • 【软考】4.2 关系代数
  • STM32F4学习笔记读取芯片UID和MAC地址
  • webpack优化策略
  • 讲讲项目里的仪表盘编辑器(三)布局组件
  • Linux- 后台运行符、nohup、disown
  • 开发过程教学——交友小程序
  • 正则表达式 Regular Expression学习
  • 代谢组学最常用到的数据分析方法(五)
  • 105.从前序与中序遍历序列构造二叉树
  • 分支定界、分支切割、分支定价的区别
  • 数字IC前端学习笔记:数字乘法器的优化设计(阵列乘法器)
  • 批量删除wordpress文章修订版本/自动草稿残留数据(3种方法)及四种方法禁用WordPress文章历史修订/自动保存/自动草稿功能
  • HTTP初识,fiddler的使用,URL各部分介绍,QueryString
  • 计算机毕业设计 基于SpringBoot的图书馆管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 第三章:最新版零基础学习 PYTHON 教程(第十二节 - Python 运算符—Python 中的运算符函数 - 套装1)
  • AAD基础知识(identity/token/PRT)
  • 基于SSM的视频点播系统设计与实现
  • React 知识点总结
  • ALSA project the C library refrerenc (ALSA工程 C库参考说明)
  • 【Maven基础篇-黑马程序员】Maven项目管理从基础到高级,一次搞定!