我尝试声明大小为0的数组a
:
int a[0];
我的VC ++ 6编译器抛出了无法创建零大小数组的错误。
如果我尝试在结构内部声明,我不会有任何错误。
struct st
{
int a[0];
}
代码被编译和链接而没有任何错误。有人可以帮我理解编译器在上述两种情况下的反应。感谢。
答案 0 :(得分:4)
结构是一种特殊情况。声明一个空数组作为结构的最后一个成员是一种常见的模式,其中结构实际上是可变长度的较大内存块的一部分。有关详细说明,请参阅Empty arrays in structs。
答案 1 :(得分:0)
有些编译器支持使用零大小数组作为结构的最后一个元素的扩展,以表明你想要分配一个你还不知道其大小的数组。然后,您可以使用该struct成员(零大小的数组)来访问该数组的元素。
请注意,这不是C89的标准功能,C99提供了另一种解决方案:
struct st
{
int a[];
}