-
适用于C语言变长数组
在实际的编程中,我们经常需要使用变长数组,但是C语言并不支持变长的数组。此时,我们可以使用结构体的方法实现C语言变长数组。 struct MyData { int nLen; char data[0];}; 在结构中,data是一个数组名;但该数组没有元素;该数组的真实地址紧随结构体MyData之后,而这个地址就是结构体后面数据的地址(如果给这个结构体分配的内容大于这个结构体实际大小,后面多余的部分就是这个data的内容);这种声明方法可以巧妙的实现C语言里的数组扩展。 实际用时采取这样: struct MyData *p = (struct MyData *)malloc(sizeof(struct MyData )+strlen(str)) 这样就可以通过p->data 来操作这个str。 PS:必须将指针定义在struct的末尾,指针的类型也可以不为char。
-
节省内存,零长度数组不占用内存空间,而指针却占用内存空间。
-
方便内存释放。如果我们的代码是在一个给别人用的函数中,你在里面做了二次内存分配,并把整个结构体返回给用户。用户调用free可以释放结构体,但是用户并不知道这个结构体内的成员也需要free,所以你不能指望用户来发现这个事。所以,如果我们把结构体的内存以及其成员要的内存一次性分配好了,并返回给用户一个结构体指针,用户做一次free就可以把所有的内存也给释放掉。
-
有利于访问速度。连续的内存有益于提高访问速度,也有益于减少内存碎片。
零长度数组
最新推荐文章于 2022-04-18 22:41:58 发布