C語言 變長結構體

2021-10-16 13:11:13 字數 631 閱讀 1208

其實真正意義上並不是結構體的大小可變,而是使用結構體中的變數代表乙個位址,從而訪問超出結構體大小範圍的資料。

struct var_len_struct

;

那結構體是怎麼實現可變長的呢?如上所示,請注意看結構體中的最後乙個元素,乙個沒有元素的陣列。我們可以通過動態開闢乙個比結構體大的空間,然後讓buffer去指向那些額外的空間,這樣就可以實現可變長的結構體了。更為巧妙的是,我們甚至可以用nsize儲存字串buffer的長度。

引出部分如果說定義定長陣列浪費空間,定義乙個指標不也能指向變長的資料域部分嗎?

是的,是可以實現的。那麼我們就對比下有什麼不同。

<1> 儲存大小方面:指標的方式需要多開闢儲存空間。

<2> 資料連續儲存方面:指標明顯資料域是單獨開闢的空間,與前的nsize不在連續的儲存區域,而陣列則在連續的儲存空間下。

<3>釋放記憶體方面:顯然指標的方式,需要先釋放資料域部分,才能釋放指向結構體的指標變數;而陣列可以直接釋放。

總結如下:

<1>socket通訊資料報的傳輸;

<2>解析資料報,如筆者遇到的問題。

<3>其他可以節省空間,連續儲存的地方等。

c語言變長結構體

1.什麼是變長陣列 struct mydata sizeof mydata 4 可能有的編譯器不支援char data 0 需要用char data 1 代替,這樣上面結構體大小是sizeof mydata 8 位元組對齊 在上結構中,data是乙個陣列名 但該陣列沒有元素 該陣列的真實位址緊隨結構...

可變長陣列 柔性陣列結構體成員 可變長結構體

可變長陣列是c99相較c89新增的乙個特性。1.可變長陣列無鏈結性,即只在 塊內作用 函式體內或者區域性 塊內 2.可變長陣列不可初始化。3.陣列長度在生存週期不可更改。即n的值不影響str的長度。4.可變長陣列作為函式形參的時候,中使用 其本質是指標。形參中的陣列還可以使用型別限定詞const v...

變長結構體之結構體指標申請記憶體

什麼叫變長結構體?typedef struct student 那結構體是怎麼實現可變長的呢?如上所示,請注意看結構體中的最後乙個元素,乙個沒有元素的陣列。我們可以通過動態開闢乙個比結構體大的空間,然後讓buffer去指向那些額外的空間,這樣就可以實現可變長的結構體了。下面我們來 動態開闢乙個比結構...