尾随数组习语

时间:2010-11-20 09:04:56

标签: c++ c arrays terminology idioms

什么是追踪数组习语

P.S:谷歌搜索这个术语给出了这些向量是使用尾随数组习惯用法实现的,因此它们无法在不改变向量对象本身地址的情况下调整大小。

3 个答案:

答案 0 :(得分:10)

如果你的意思是GCC source code(你的引用来自哪里)中提到的尾随数组习惯用法,它似乎引用旧的C技巧来实现动态数组:

typedef struct {
    /* header */
    size_t nelems;

    /* actual array */
    int a[1];
} IntVector;

使用

创建数组
IntVector *make_intvector(size_t n)
{
    IntVector *v = malloc(sizeof(IntVector) + sizeof(int) * (n-1));
    if (v != NULL)
        v->nelems = n;
    return v;
}

答案 1 :(得分:1)

它似乎引用了结构中的数组,它可能具有可变的数组大小。参见:

http://blogs.msdn.com/b/oldnewthing/archive/2004/08/26/220873.aspxhttp://sourceware.org/gdb/current/onlinedocs/gdbint/Support-Libraries.html

另一个提示,如果你谷歌的表达式将表达式放在“”像“尾随数组”这将给你更具体的结果。谷歌知道跟踪数组。

答案 2 :(得分:1)

我认为的意思是:

struct foo {
  ... some data members, maybe the length of bar ...
  char bar[]; /* last member of foo, char is just an example */
};

通过分配malloc(sizeof(struct foo)+LEN)来使用它,其中LEN是bar的所需长度。这样只需要一个 malloc。 []只能与最后一个结构成员一起使用。

而且,就像我理解GCC doc一样,struct foo也只能(合理地)用作另一个结构的最后一个成员,因为存储大小不固定 - 或者作为指针。