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

零长度数组与柔性数组

作者: 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吸收了这个特性并加以改变而产生了柔性数组。

    相关文章

      网友评论

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

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