C 声明零大小数组

C 声明零大小数组,c,C,我尝试声明大小为0的数组a: int a[0]; 我的VC++6编译器抛出一个错误,无法创建零大小的数组 如果我在一个结构中尝试同样的声明,我不会得到任何错误 struct st { int a[0]; } 代码得到编译和链接,没有任何错误。有人能帮我理解编译器在上述两种情况下的反应吗。谢谢。结构是一个特例。将空数组声明为结构的最后一个成员是一种常见模式,其中结构实际上是可变长度的较大内存块的一部分。有关更多说明,请参阅。结构是一种特殊情况。将空数组声明为结构的最后一个成员是一种常

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

int a[0]; 
我的VC++6编译器抛出一个错误,无法创建零大小的数组

如果我在一个结构中尝试同样的声明,我不会得到任何错误

struct st
{
    int a[0];
}

代码得到编译和链接,没有任何错误。有人能帮我理解编译器在上述两种情况下的反应吗。谢谢。

结构是一个特例。将空数组声明为结构的最后一个成员是一种常见模式,其中结构实际上是可变长度的较大内存块的一部分。有关更多说明,请参阅。

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

一些编译器支持将零大小数组用作结构的最后一个元素的扩展,以表明您打算在其中分配一个大小未知的数组。然后可以使用该结构成员(零大小数组)访问该数组的元素

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

struct st
{
    int a[];
}

一些编译器支持将零大小的数组作为结构的最后一个元素进行扩展,以表明您打算在其中分配一个大小未知的数组。然后可以使用该结构成员(零大小数组)访问该数组的元素

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

struct st
{
    int a[];
}