出處: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],在早期有些技術牛人都愛這樣寫,
不過在今天這是一種不安全的寫法,不推薦,而且現在的編譯器也比較嚴格,一般通不過編譯了。