柔性陣列是成員數為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為...