美文网首页转载部分
零长度数组与柔性数组

零长度数组与柔性数组

作者: yiltoncent | 来源:发表于2015-03-16 17:11 被阅读1014次

零长度数组(Zero-length array)与柔性数组(Flexible array)

GNU C允许使用零长度数组,它们非常有用。如下是一个零长度数组的应用,零长数组在有固定头部的可变对象上非常有用。

struct line{     
    int len;     
    char contents[0]
};

零长数组使用的优缺点:

优点

  • 不需要使用指针来分配内存,节约一个指针变量所占内存大小,也使内存申请方式更加便捷;
  • 分配的内存连续,管理与释放简单,只需要一次操作。

缺点

  • 零长数组是GNU C的实现,非标准,因此并不是所有的编译器都支持,有移植风险。

而在最新的ISO C99实现中,我们可以使用柔性数组,与零长数组相比,在语法和语义上有些许差异:

  • 柔性数组写成contents[],没有0。
  • 柔性数组属于不完整类型,可能sizeof操作符不能运用在它上面。作为零长数组原始实现的变体,sizeof计算结果为0。
  • 柔性数组作为成员只能出现在struct的最后。
  • 一个包含柔性数组成员的结构体或包含这样结构体的联合体,不能成为一个结构体的成员或数组的元素。

比较零长数组和柔性数组,他们的功能性是一致的:方便的应用在有固定头部的可变对象上。这种特性非常适用于网络数据传输的场合。需要注意的是,他们分别一个是非标准一个是标准,零长数组是由GNU提出并实现的,这也反应了当时C编程者对于这种特性的需求。可以想象,ISO C99吸收了这个特性并加以改变而产生了柔性数组。

相关文章

  • 零长度数组与柔性数组

    零长度数组(Zero-length array)与柔性数组(Flexible array) GNU C允许使用零长...

  • golang 数组与切片

    1. 切片与数组对比 (1). 列表数组是具有固定长度且拥有零个或者多个相同数据类型元素的序列。数组的长度是数组类...

  • c 语言几个特殊写法

    1 零长度和变量长度数组 零长度数组GNU C 编译器允许使用零长度数组,在定义变长对象的头结构体时,这个特性非常...

  • 零长度数组在内核中的运用

    什么叫0长度数组 零长度数组就是长度为零的数组,在内存空间中不占用存储位置。 ANSI C 标准规定定义一个数组时...

  • Go Array

    数组是由固定长度特定类型元素组成的序列 数组可由零个或多个元素组成 Go语言中数组是固定长度且特定类型的,与之对应...

  • golang数组

    数组的定义 数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。数组的长度是数组类型的...

  • shell笔记19(数组)

    定义数组: array = $()定义数组 数组长度: 显示数组元素: 显示所有元素: 删除元素与覆盖: ...

  • shell数组

    数组创建方法 输出整个数组 获取数组元素个数,方法与获取字符串长度的方法相同 获取数组单个元素的长度

  • C++中的柔性数组

    描述 C99标准提供在结构体最后一个元素定义一个未知大小的数组,它就叫做柔性数组成员。 柔性数组的特点 定义柔性数...

  • 柔性数组

    在接触变长结构体之前,以为会是一个很难理解的东西,但是这其实算是C里面的一种技巧吧,优点是:分配了一段连续的内存,...

网友评论

    本文标题:零长度数组与柔性数组

    本文链接:https://www.haomeiwen.com/subject/fneixttx.html