c柔性數組結構成員

來源:互聯網
上載者:User

標籤:style   strong   ar   new   size   c++   ef   on   

  C99中,結構中的最後一個元素允許是未知大小的數組,這就叫做柔性數群組成員,但結構中的柔性數群組成員前面必須至少一個其他成員。柔性數群組成員允許結構中包含一個大小可變的數組。sizeof返回的這種結構大小不包括柔性數組的記憶體。包含柔性數群組成員的結構用malloc ()函數進行記憶體的動態分配,並且分配的記憶體應該大於結構的大小,以適應柔性數組的預期大小。

結構體變長的妙用——0個元素的數組

有時候我們需要定義一種可變長結構體。

  typedef struct st_type
  {
  int nCnt;
  int item[0];
  }type_a;

(有些編譯器會報錯,修改成如下)

  typedef struct st_type
  {
  int nCnt;
  int item[];  //有些編譯器不允許0長度的數組
  }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;

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.