将C结构成员声明为大小为1而不是指针的数组有什么好处:
struct {
a_struct_t a_member[1];
...
}b_struct;
Run Code Online (Sandbox Code Playgroud)
提前致谢
在典型的情况下,具有被声明为一个项的数组的成员的结构将该成员作为结构中的最后一项.目的是动态分配结构.分配时,代码将为该数组中您真正想要/需要的项目分配空间:
struct X {
time_t birthday;
char name[1];
};
struct X *x = malloc(sizeof(*x) + 35);
x->birthday = mktime(&t);
strcpy(x->name, "no more than 35 characters");
Run Code Online (Sandbox Code Playgroud)
这对字符串特别有用 - 你在结构中分配的字符为NUL终结符提供了空间,因此当你进行分配时,你分配的字符数就是strlen()你要放入的字符串的数量.那里.对于大多数其他类型的项目,您通常希望从分配大小中减去一个(或者只是分配的空间是一个大于严格必要的项目).
您可以使用指针执行(排序)相同的操作,但它会导致将结构体分配给您通过指针引用的项目.好处是(与上述方法不同)可以动态分配多个项目,其中上述方法仅适用于结构的最后一个成员.