码迷,mamicode.com
首页 > 编程语言 > 详细

C语言struct中的长度可变数组(Flexible array member)

时间:2018-05-31 14:40:08      阅读:897      评论:0      收藏:0      [点我收藏+]

标签:int   with   表示   ble   可变   成员   []   c99   数组   

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;
}

C语言struct中的长度可变数组(Flexible array member)

标签:int   with   表示   ble   可变   成员   []   c99   数组   

原文地址:https://www.cnblogs.com/gexin/p/9116292.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!