0長度陣列問題

2021-06-01 13:11:54 字數 390 閱讀 6412

標準c/c++不支援0長度陣列,gnu支援

struct node

;

int main(int argc, char* argv)

// 上述**輸出為12, 0長度陣列不占用記憶體空間

// **中e表示乙個常量指標,這個特性由編譯器來實現的,故具有不可移植性

對於這個用法,我們定義的結構體指標可以指向任意長度的記憶體buffer,這個技巧在變長buffer中使用起來相當方便。可能有朋友說,為什麼不把最後的contents直接定義為乙個指標呢?這兒的差別是這樣的,如果定義為乙個指標,它需要占用4bytes,並且在申請好記憶體後必須人為賦位址才可以。如果使用這個用法,這個常量指標不占用空間,並且無需賦值。

0 長度陣列

在標準 c 和 c 中,不允許用 0 長度陣列,但在 gnu c 中,卻可以定義 0 長度陣列。比如 引用 struct line 0 長度陣列不占有空間,從列印 sizeof struct line 可以看到這個結構體的長度為 4,這 4 位元組空間屬於整型量 length 那麼結構體裡最後的 0...

柔性陣列(0長度陣列)

柔性陣列這個概念相信大多數人博友都沒有聽說過,但是它確實存在。在c99中,結構 結構體 的最後乙個元素允許是未知大小的陣列,這就叫做柔性陣列成員。比如 struct s 或者是 struct s 一 結構中柔性陣列成員前面必須至少有乙個其他成員比如,當你建立含有柔性陣列成員的結構體時,結構體成員不能...

結構體0長度陣列的作用

在標準 c 和 c 中,不允許用 0 長度陣列,但在 gnu c 中,卻可以定義 0 長度陣列。比如 引用 struct line 0 長度陣列不占有空間,從列印 sizeof struct line 可以看到這個結構體的長度為 4,這 4 位元組空間屬於整型量 length 那麼結構體裡最後的 0...