什么是追踪数组习语?
P.S:谷歌搜索这个术语给出了这些向量是使用尾随数组习惯用法实现的,因此它们无法在不改变向量对象本身地址的情况下调整大小。
答案 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.aspx 和 http://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
也只能(合理地)用作另一个结构的最后一个成员,因为存储大小不固定 - 或者作为指针。