认识柔性数组

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

限制条件是:

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

1.柔性数组的形式

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

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

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

cs 复制代码
typedef struct st_type
{
    int i;
    int a[];//柔性数组成员
}type_a;

2.柔性数组的特点

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

例如:

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

3.柔性数组的优势

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

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

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

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

相关推荐
Hygge-star8 小时前
【数据结构】二分查找5.12
java·数据结构·程序人生·算法·学习方法
加什么瓦10 小时前
Redis——底层数据结构
数据结构
小狗祈祷诗10 小时前
day22-数据结构之 栈&&队列
c语言·数据结构
软行11 小时前
LeetCode 每日一题 3341. 到达最后一个房间的最少时间 I + II
数据结构·c++·算法·leetcode·职场和发展
sz66cm14 小时前
算法基础 -- 小根堆构建的两种方式:上浮法与下沉法
数据结构·算法
顾小玙14 小时前
数据结构进阶:AVL树与红黑树
数据结构
野曙15 小时前
快速选择算法:优化大数据中的 Top-K 问题
大数据·数据结构·c++·算法·第k小·第k大
Codeking__16 小时前
”一维前缀和“算法原理及模板
数据结构·算法
_星辰大海乀17 小时前
表的设计、聚合函数
java·数据结构·数据库·sql·mysql·数据库开发
智慧城市203018 小时前
麦肯锡110页PPT企业组织效能提升调研与诊断分析指南
组合模式·柔性数组