1. 程式人生 > >C語言struct中的長度可變數組(Flexible array member)

C語言struct中的長度可變數組(Flexible array member)

wing art arr item 1 eof AI clas follow erro

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)