靈活數組類型
外觀
此條目包含指南或教學內容。 (2017年4月1日) |
靈活數組類型[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支持。
參考文獻
[編輯]- ^ Lesser known C features. [2014-12-30]. (原始內容存檔於2014-12-23).
- ^ http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf (頁面存檔備份,存於網際網路檔案館) section §6.7.2.1, item 16, page 103