出处:http://blog.csdn.net/stand1210/article/details/52459372
1
2
3
4
5
|
typedef struct
list_t{ struct list_t
*next; struct list_t
*prev; char data[0]; }list_t; |
最后一行char data[0];的作用是?
方便管理内存缓冲区
减少内存碎片化
struct MyData
{
int nLen;
char data[0];
};
在结构中,data是一个数组名;但该数组没有元素;该数组的真实地址紧随结构体MyData之后,而这个地址就是结构体后面数据的地址(如果给这个结构体分配的内容大于这个结构体实际大小,后面多余的部分就是这个data的内容);这种声明方法可以巧妙的实现C语言里的数组扩展。
这样整体形成一个数据包,好处是char data[0]不占用空间,而且形成一个整体,
访问时依靠数组下标溢出的特性,p->data[size],在早期有些技术牛人都爱这样写,
不过在今天这是一种不安全的写法,不推荐,而且现在的编译器也比较严格,一般通不过编译了。