1. 程式人生 > >C語言變長陣列data[0]【總結】

C語言變長陣列data[0]【總結】

發現在linux核心中,結構體中經常用到data[0]。這樣設計的目的是讓陣列長度是可變的,根據需要進行分配。方便操作,節省空間。

struct buffer
{
    int data_len;   //長度
    char data[0];  //起始地址
};

在這個結構中,data是一個數組名;但該陣列沒有元素;該陣列的真實地址緊隨結構體buffer之後,而這個地址就是結構體後面資料的地址(如果給這個結構體分配的內容大於這個結構體實際大小,後面多餘的部分就是這個data的內容);這種宣告方法可以巧妙的實現C語言裡的陣列擴充套件。

對比char data[0],char *data, char data[]
data[0]和data[]不佔用空間,且地址緊跟在結構後面,而char *data作為指標,佔用4個位元組,地址不在結構之後。

https://www.cnblogs.com/Anker/p/3744127.html