c99中,結構中的最後乙個元素允許是未知大小的陣列,這就叫做柔性陣列成員,但結構中的柔性陣列成員前面必須至少乙個其他成員。柔性陣列成員允許結構中包含乙個大小可變的陣列。sizeof返回的這種結構大小不包括柔性陣列的記憶體。包含柔性陣列成員的結構用malloc ()函式進行記憶體的動態分配,並且分配的記憶體應該大於結構的大小,以適應柔性陣列的預期大小。
結構體變長的妙用——0個元素的陣列
有時候我們需要定義一種可變長結構體。
typedef struct st_type
type_a;
(有些編譯器會報錯,修改成如下)
typedef struct st_type
type_a;
這樣我們便有了乙個可變長的結構sizeof(type_a)== 4。
c語言版:
type_a *p = (type_a*)malloc(sizeof(type_a)+100*sizeof(int));
c++語言版:
type_a *p = (type_a*)new char[sizeof(type_a)+100*sizeof(int)];
這樣我們就產生了乙個長為100的type_a型別的東西用p->item[n]就能簡單地訪問可變長元素,原理十分簡單,分配了比sizeof(type_a)多的記憶體後int item;就有了其意義了,它指向的是int ncnt;後面的內容,是沒有記憶體需要的,而在分配時多分配的記憶體就可以由其來操控,是個十分好用的技巧。
而釋放同樣簡單:
c語言版:
free(p);
c++語言版:
delete p;
c之柔性陣列成員
在這裡我們來說說c語言中遇到的柔性陣列,為了能夠更好的讓讀者理解柔性陣列,在了解柔性陣列之前我們先通過理解不完整型別來引入柔性陣列的概念。在此之前應該沒有那本數會完整的介紹不完整型別,所以大家讀到不完整型別的時候都會感覺到腦空白一片,但其實我們在程式中會經常遇到不完整型別,下面我們舉例來說明什麼是柔...
可變長陣列 柔性陣列結構體成員 可變長結構體
可變長陣列是c99相較c89新增的乙個特性。1.可變長陣列無鏈結性,即只在 塊內作用 函式體內或者區域性 塊內 2.可變長陣列不可初始化。3.陣列長度在生存週期不可更改。即n的值不影響str的長度。4.可變長陣列作為函式形參的時候,中使用 其本質是指標。形參中的陣列還可以使用型別限定詞const v...
c柔性陣列
一 定義 c99及以上標準支援 標準示例如下 typedef struct st type type a 初始大小為sizeof i 0個元素的陣列沒有占用空間,而後我們可以進行變長操作了。通過如下表示式給結構體分配記憶體 type a p type a malloc sizeof type a 1...