結構中的最後一個元素容許是未知大小的數組,這就叫作柔性數組(flexible array)成員(也叫伸縮性數組成員),但結構中的柔性數組成員前面必須至少一個其餘成員。柔性數組成員容許結構中包含一個大小可變的數組。柔性數組成員只做爲一個符號地址存在,並且必須是結構體的最後一個成員,sizeof返回的這種結構大小不包括柔性數組的內存。柔性數組成員不只能夠用於字符數組,還能夠是元素爲其它類型的數組。包含柔性數組成員的結構用malloc()函數進行內存的動態分配,而且分配的內存應該大於結構的大小,以適應柔性數組的預期大小。
形如:數組
typedef struct var_array { int i; char data[]; }Var_a
須要說明的是:C89不支持這種東西,C99把它做爲一種特例加入了標準。可是,C99所支持的是incomplete type,而不是zero array,形同int a[0];這種形式是非法的,C99 支持的形式是形同int a[];只不過有些編譯器把int a[0];做爲非標準擴展來支持,並且在C99 發佈以前已經有了這種非標準擴展了,C99 發佈以後,有些編譯器把二者合而爲一了。markdown