在標准C 或者C++ 中由於不支持0 長度的數組,所以int array[0]; 這樣的定義是非法的。不過有些編譯器的擴展功能支持0 長度的數組。
在C 中,0 長度的數組的主要用途是用來作為結構體的最後一個成員,然後用它來訪問此結構體對象之後的一段內存(通常是動態分配的內存)。由於其非標准性,在程序中盡量避免使用0 長度的數組。作為替換,可以使用C99 標准中的不完整數組來替換0 長度的數組定義。如:
struct X {
/* Members */
int array[]; /* Do not write int array[0]; since it is not standard. */
};
一般性應用:
struct A {
int a, b;
char data[0];
/* do not write fields below */
};
struct A *p;
int n = 100, i;
p = malloc(sizeof(struct A) + n);
for (i = 0; i < n; ++i)
p->data[i] = 1;
摘自 redxu的專欄