结构末尾的数组声明?

时间:2011-01-24 07:58:04

标签: c++

我刚刚遇到一些在C ++类中声明结构的代码,如下所示:

struct T 
{
       int data;
       T* next;
} array[0];

这种声明有什么作用?将“array [0]”放在结构定义的末尾会有什么影响?

6 个答案:

答案 0 :(得分:3)

啊,它几乎是一个“灵活的阵列成员”

它在C99中正式化,但它是一个创建动态数组的旧C技巧。为对象分配更多内存,您可以在数组中存储更多元素。

我认为使用特定的0存在折衷,因为实际的[]灵活数组不在C89或C ++中。这种模式的规范遗留使用更为...[1]

答案 1 :(得分:1)

这意味着,结构定义仅在该类中可用。

答案 2 :(得分:1)

尝试声明类型T和大小为零T的数组。但是,在C ++中声明零大小的数组是不合法的。该代码无效。

答案 3 :(得分:1)

在某些编译器中,如GCCzero length array是使用[]表示法声明的灵活类/结构成员的同义词。

答案 4 :(得分:0)

不确定是否是这种情况,但是:

当一个结构必须包含一个可变长度的C字符串(在初始化后不会改变),那么而不是写:

struct x {
    int key;
    const char* s;
};

当我们需要两个malloc时(一个用于struct,一个用于字符串),我们可以写

struct X2 {
    int key;
    char s[1];
}x2;
// and use it like 
x2* tmp = (x2*)malloc(sizeof(x2) + strlen(str));

这里我们只有一个malloc,结构和字符串。

当结构的最后一个属性是一个数组时,那么通过为结构分配变量空间,我们可以用可变数量的这样的成员分配它。我想这会发生在你的情况下。

答案 5 :(得分:0)

众所周知,它是c struct hack,但是当你使用它时take care