整理 零長度陣列

2021-06-01 12:01:25 字數 619 閱讀 7065

零長度陣列 

********** 

gnu c 允許使用零長度陣列,在定義變長物件的頭結構時,這個特性非常有用。例 

如: ++++ include/linux/minix_fs.h 

struct minix_dir_entry ; 

結構的最後乙個元素定義為零長度陣列,它不佔結構的空間。在標準 c 中則需要 

定義陣列長度為 1,分配時計算物件大小比較複雜。 

標準c中不能這麼寫,陣列大小至少為1:

struct minix_dir_entry ; 

那麼怎麼使用這個零長度陣列呢,申請記憶體時,寫:

struct minix_dir_entry *dir = malloc(sizeof(struct minix_dir_entry) + length);

length值你就可以自己定了,但是你這個struct minix_dir_entry真正占用的空間大小,無法再用sizeof操作來求取,有時需要在struct minix_dir_entry裡加入個域值,比如int length;申請完記憶體後,將上面length值放入結構中的這個length。以後就可以求出記憶體的邊界了,不然都不知道記憶體邊界在**。

主要參考:

lenn

零長度陣列

零長度陣列 神奇的int reserve 0 include include struct device 構題 device 之後 這種宣告方法可以巧妙的實現c語 言裡的陣列擴充套件 int main a.out p dev reserve 0 100 p dev reserve 24 0 size...

零長度陣列

最近在準備分析linux input子系統,發現核心 裡面有很多小技巧。特此記錄下,如有不足之處,敬請指正。在日常的程式設計中,有時候需要在結構體中存放乙個長度動態的字串,比如說,我們要在結構體中存放乙個名字,但是這個名字的長度是未知的。於是,我們就會採用以下兩種方法來解決這個問題。注 以下的 都是...

零長度陣列

適用於c語言變長陣列 在實際的程式設計中,我們經常需要使用變長陣列,但是c語言並不支援變長的陣列。此時,我們可以使用結構體的方法實現c語言變長陣列。struct mydata 在結構中,data是乙個陣列名 但該陣列沒有元素 該陣列的真實位址緊隨結構體mydata之後,而這個位址就是結構體後面資料的...