认识柔性数组

简介: 认识柔性数组

在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就可以把所有的内存释放掉

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

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

相关文章
|
4月前
|
编译器 C语言
柔性数组理解
柔性数组理解
36 0
|
10月前
|
编译器 C语言 Python
柔性数组
柔性数组
36 0
|
4月前
|
编译器 C语言
C语言中柔性数组的讲解与柔性数组的优势
C语言中柔性数组的讲解与柔性数组的优势
|
编译器 C语言 C++
动态内存分配(3)——柔性数组
动态内存分配(3)——柔性数组
|
4月前
|
编译器
关于柔性数组
关于柔性数组
|
4月前
|
编译器 C语言
|
存储 算法 程序员
【C/C++】动态内存&柔性数组
【C/C++】动态内存&柔性数组
92 0
|
编译器 C语言
带你认识柔性数组
小编今天又给大家带来新东西了,相信柔性数组这个名词对于大部分人都比较陌生,那接下来就让我们去认识认识这个新朋友
65 0
|
编译器 C语言
【学习笔记之我要C】柔性数组
【学习笔记之我要C】柔性数组
58 0
|
程序员 C++
【C/C++动态内存 or 柔性数组】——对动态内存分配以及柔性数组的概念进行详细解读(张三 or 李四)
【C/C++动态内存 or 柔性数组】——对动态内存分配以及柔性数组的概念进行详细解读(张三 or 李四)
106 0