什么叫变长结构体?
其实真正意义上并不是结构体的大小可变,而是使用结构体中的变量代表一个地址,从而访问超出结构体大小范围的数据。
struct Var_Len_Struct
{
int nsize;
char buffer[0];
};
那结构体是怎么实现可变长的呢?如上所示,请注意看结构体中的最后一个元素,一个没有元素的数组。我们可以通过动态开辟一个比结构体大的空间,然后让buffer去指向那些额外的空间,这样就可以实现可变长的结构体了。更为巧妙的是,我们甚至可以用nsize存储字符串buffer的长度。
变长结构体的好处体现在哪?
引出部分如果说定义定长数组浪费空间,定义一个指针不也能指向变长的数据域部分吗?
是的,是可以实现的。那么我们就对比下有什么不同。