柔性陣列的使用

2021-08-19 22:05:45 字數 1165 閱讀 5840

在c99中,對於結構體中的最後乙個成員,可以允許最後乙個成員是未知大小的陣列,這樣的陣列就叫做柔性陣列。

typedef

struct st_type

type_a;

某些編譯器對於這種寫法會報錯,我們可以改寫為下面的形式:

typedef

struct st_type

type_a;

例如:

typedef

struct st_type

type_a;

printf("%d",sizeof(type_a));//4

int i=0;

type_a *p=(type_a *)malloc(sizeof(type_a)+100*sizeof(int));

p->i=100;

for(i=0;i<100;i++)

free(p);

這樣柔性陣列成員a,相當於獲得了100個整型元素的連續空間。

上面的結構體也可以設計成這樣:

typedef

struct st_type

type_a;

type_a *p=(type_a *)malloc(sizeof(type_a));

p->i=100;

p->p_a=(int *)malloc(p->i*sizeof(int));

for(i=0;i<100;i++)

free(p->p_a);

p->p_a=null;

free(p);

p=null;

上述兩種方式可以完成同樣的功能,但是使用第一種柔性陣列的實現有兩個好處:

第乙個好處是:方便記憶體釋放

如果我們的**是在乙個給別人用的函式中,你在函式中做了兩次記憶體分配,並把整個結構體返回給使用者。使用者呼叫free可以釋放結構體,但是使用者並不知道這個結構體內的成員也需要free,所以你不能指望使用者來發現這個事。所以,如果我們把結構體的記憶體以及其成員要的記憶體一次性分配好了,並返回給使用者乙個結構體指標,使用者做一次free就可以把所有的記憶體

也給釋放掉。

第二個好處是:有利於訪問速度.

連續的記憶體有益於提高訪問速度,也有益於減少記憶體碎片。

柔性陣列(flexible array)

相信好多人都沒聽過這個概念 柔性陣列 flexible array 到底什麼是柔性陣列呢?柔性陣列的定義 結構中最後乙個元素允許是未知大小的陣列,這就是柔性陣列。柔性陣列的使用舉例 include include include typedef struct c c intmain void pri...

c柔性陣列

一 定義 c99及以上標準支援 標準示例如下 typedef struct st type type a 初始大小為sizeof i 0個元素的陣列沒有占用空間,而後我們可以進行變長操作了。通過如下表示式給結構體分配記憶體 type a p type a malloc sizeof type a 1...

試題 柔性陣列

目錄 一 試題 開發c 時,經常見到如下型別的結構體定義 二 請分析下面的程式,看一看如何使用柔性陣列。三 結構體中使用指標實現柔性陣列功能 橫掃offer 程式設計師招聘真題詳解700題 著者 開點工作室編著 p51 typedef struct list t list t 最後一行char da...