零长度数组

在酷客上看到皓子的一篇博文

C语言结构体里的成员数组和指针http://coolshell.cn/articles/11377.html

感觉非常有意思,刚才突然想到了里面的零长度数组,竟然忘记怎么去实现了。特意写一篇文章巩固一下

 1 //零长度数组在结构体中这样表示,之后根据len的大小
 2 //动态调整str的长度
 3 typedef struct
 4 {
 5     int len;
 6     char s[0];
 7 }str;
 8 
 9 str * CreateStr(int length) {
10     if(length <= 0) {
11         return NULL;
12     }
13     str *StrPt = (str*)malloc(sizeof(str) + length * sizeof(char));
14     StrPt->len = length;
15     memset(StrPt->s, '', StrPt->len);
16     return StrPt;
17 }

这种数组叫做柔性数组,数组大小可以在实例化时再去决定。且能够使结构体中的数组和结构体在内存中保存连续,便于内存释放。皓子讲到可能对于提升访问速度不见得有很大提高,但看到这种代码觉得很有意思。在规则内玩一些trick。

原文地址:https://www.cnblogs.com/noanswer/p/3645360.html