0

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

int a[0]; 

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

如果我尝试在结构内部进行相同的声明,我不会收到任何错误。

struct st
{
    int a[0];
}

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

4

2 回答 2

4

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

于 2013-04-19T13:34:46.303 回答
0

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

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

struct st
{
    int a[];
}
于 2013-04-19T13:47:41.590 回答