C語言中柔性陣列的用法

2021-08-02 15:58:51 字數 842 閱讀 8854

柔性陣列是成員數為0的陣列,單獨並不可用。如果強行定義乙個,編譯器會報錯。譬如,定義 int a[0];編譯後會出現錯誤:

error c2466: cannot allocate an array of constant size 0。

上面錯誤的意思是不能夠分配乙個長度為零的陣列。

柔性陣列只能做為結構體的最後乙個成員,例如:

typedef struct __tlv tlv_t;

柔性陣列的作用是,當我們結構體緊接著分配乙個大小不固定的記憶體空間的時候,柔性陣列會自動指向那段記憶體,而且柔性陣列本身不佔任何的空間。在資料結構tlv裡,用柔性陣列恰到好處。當然,val也可以用void *指標來代替,只不過,指標變數本身也要分配一段記憶體空間,那麼在實際使用過程中,tlv結構裡面多出乙個指標變數,且在記憶體上不連續。

#include #include #include typedef struct __tlv  tlv_t;

typedef struct test_t;

int main()

編譯後,執行:

tlv_t size = 4

test_t size = 4

請按任意鍵繼續. . .

可見,多了柔性陣列,兩個結構總大小是一致的。

#include #include #include typedef struct __tlv  tlv_t;

#define tlv_v "tlv test val"

int main()

編譯執行:

tlv val: tlv test val

C語言 柔性陣列

柔性陣列 flexible array 也叫伸縮性陣列,其實就是變長陣列,反映了c語言對精煉 的極致追求。這種 結構產生於對動態結構體的需求。比如我們需要在結構體中存放乙個動態長度的字串,這時候,柔性陣列可以大顯身手了。c99使用不完整型別來實現柔性陣列,標準形式如下 struct mystruct...

C語言柔性陣列

1 柔性陣列 c語言中結構體的最後乙個元素可以是大小未知的陣列 c語言中可以由結構體產生柔性陣列 typedef struct soft array softarray 可以試試,printf d sizeof softarray 列印出它的sizeof 大小 結果是4,也就是說array這個未知長...

C語言建立柔性陣列

typedef struct softarray softarray create soft array int size return ret q ret 為null,訪問ret array為什麼沒有導致程式奔潰呢 這裡沒有訪問ret array 即沒要它的位址 只是要了array的型別。ret為...