zoukankan      html  css  js  c++  java
  • C语言struct中的长度可变数组(Flexible array member)

    C_struct中的长度可变数组(Flexible array member)

    Flexible array member is a feature introduced in the C99 standard of the C programming language (in particular, in section §6.7.2.1, item 16, page 103). It is a member of a struct, which is an array without a given dimension, and it must be the last member of such a struct, as in the following example:

    struct vectord {
        uint8_t  len;
        double   arr[]; // the flexible array member must be last
    };
    
    • arr[]不占用结构体的存储空间,sizeof(strcut vectord)的值为1
    • 变长数组必须是结构体的最后一个成员
    • 结构体变量相邻的连续存储空间是arr[]数组的内容
    • gcc中使用0长度的数组arr[0]来表示变长数组。
    struct vectord *allocate_vectord (size_t len) {
       struct vectord *vec = malloc(offsetof(struct vectord, arr) + len * sizeof(vec->arr[0]));
    
       if (!vec) {
           perror("malloc vectord failed");
           exit(EXIT_FAILURE);
       }
    
       vec->len = len;
    
       for (size_t i = 0; i < len; i++)
           vec->arr[i] = 0;
    
       return vec;
    }
    
  • 相关阅读:
    最短路-dij
    链式前向星
    B树、B+树
    C++类
    差分约束
    数位DP
    Markdown编辑器:表格
    git使用笔记
    leetcode 162. 寻找峰值(二分)
    python matplotlib包的安装注意事项:报错——No such file or dir : tmp/matplotlib-xxxxxx
  • 原文地址:https://www.cnblogs.com/gexin/p/9116292.html
Copyright © 2011-2022 走看看