声明零大小的数组

时间:2013-04-19 13:31:23

标签: c

我尝试声明大小为0的数组a

int a[0]; 

我的VC ++ 6编译器抛出了无法创建零大小数组的错误。

如果我尝试在结构内部声明,我不会有任何错误。

struct st
{
    int a[0];
}

代码被编译和链接而没有任何错误。有人可以帮我理解编译器在上述两种情况下的反应。感谢。

2 个答案:

答案 0 :(得分:4)

结构是一种特殊情况。声明一个空数组作为结构的最后一个成员是一种常见的模式,其中结构实际上是可变长度的较大内存块的一部分。有关详细说明,请参阅Empty arrays in structs

答案 1 :(得分:0)

有些编译器支持使用零大小数组作为结构的最后一个元素的扩展,以表明你想要分配一个你还不知道其大小的数组。然后,您可以使用该struct成员(零大小的数组)来访问该数组的元素。

请注意,这不是C89的标准功能,C99提供了另一种解决方案:

struct st
{
    int a[];
}