我尝试声明一个大小为 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[];
}