靈活陣列類型

靈活陣列類型[1]C99引入的語言特性。[2]即在struct資料類型的最後一個資料成員,可以為一個未指明長度的陣列類型。例如:

struct double_vector_st {
    size_t length;
    double array[]; // the flexible array member should be last
};

sizeof運算子作用於這個struct,返回靈活陣列成員的偏移量。在堆上分配這種struct,應該保留靈活陣列的空間。如下例:

struct double_vector_st *allocate_double_vector(size_t len) {
   struct double_vector_st *vec = malloc(sizeof *vec + len * sizeof vec->array[0]);

   if (!vec) {
       perror("malloc double_vector_st failed");
       exit(EXIT_FAILURE);
   }

   vec->length = len;

   for (size_t ix = 0; ix < len; ix++)
       vec->array[ix] = 0.0;

   return vec;
}

C++語言標準尚未支援靈活陣列類型。但Visual C++2015支援。

參考文獻

  1. ^ Lesser known C features. [2014-12-30]. (原始內容存檔於2014-12-23). 
  2. ^ http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf頁面存檔備份,存於網際網路檔案館) section §6.7.2.1, item 16, page 103