下班寫文章難免會(huì)有些出錯(cuò),也感謝那些在后臺(tái)留言指出錯(cuò)誤的讀者;表驅(qū)那篇推文存在數(shù)組越界問題,可以通過預(yù)先開辟一個(gè)大數(shù)組的方式解決,但這樣解決方式會(huì)存在資源浪費(fèi)問題,如果想不浪費(fèi)資源來解決數(shù)組溢出的問題,那就來看看柔性數(shù)組怎么樣!
|簡(jiǎn)單介紹
C99中,結(jié)構(gòu)體中的最后一個(gè)元素允許是未知大小的數(shù)組,這就叫作 柔性數(shù)組 。 柔性數(shù)組的特點(diǎn):
結(jié)構(gòu)體中柔性數(shù)組成員前面必須至少有一個(gè)其他成員。
sizeof返回的這種結(jié)構(gòu)大小不包括柔性數(shù)組的內(nèi)存。
包含柔性數(shù)組成員的結(jié)構(gòu)用malloc()函數(shù)進(jìn)行內(nèi)存的動(dòng)態(tài)分配。
#includetypedef struct { int length; intarr[]; }data_t; int main() { data_t data1; printf("sizeof:%d ",sizeof(data1)); return 0; }
注意:在DEV CPP中,屏蔽了第五行并不會(huì)報(bào)錯(cuò)!
| 簡(jiǎn)單使用
#include#include typedef struct { int length; int arr[]; }data_t; int main() { //為結(jié)構(gòu)體及其柔性數(shù)組成員申請(qǐng)一塊連續(xù)的空間 data_t *p=(data_t*)malloc(sizeof(data_t)+10*sizeof(int)); if(NULL==p) { printf("malloc error "); return 0; } p->length=10; for(int i=0;i length;i++) { p->arr[i]=i;//賦值 printf("%d ",p->arr[i]); } printf(" "); //重新調(diào)整所申請(qǐng)的空間,將柔性數(shù)組調(diào)整為40 p=(data_t*)realloc(p,sizeof(int)+40); if(NULL==p) { printf("malloc error "); return 0; } p->length=40; for(int i=0;i length;i++) { p->arr[i]=i;//賦值 printf("%d ",p->arr[i]); } printf(" "); //釋放內(nèi)存 free(p); p=NULL; return 0; }
| 優(yōu)勢(shì)總結(jié)
柔性數(shù)組的特點(diǎn)在于只需要用一次malloc創(chuàng)建就可以,而且和結(jié)構(gòu)體是在同一塊連續(xù)的空間,對(duì)比在結(jié)構(gòu)體中放指針成員而言,可以減少內(nèi)存碎片化,因?yàn)閙alloc申請(qǐng)的內(nèi)存位置是任意的;柔性數(shù)組申請(qǐng)的內(nèi)存更加集中,有利于查找使用;柔性數(shù)組只用開辟一次,有利于提高訪問速度;用malloc函數(shù)進(jìn)行動(dòng)態(tài)內(nèi)存申請(qǐng)時(shí),柔性數(shù)組的大小應(yīng)該大于結(jié)構(gòu)體的大小以便于柔性數(shù)組適應(yīng)預(yù)期大小。 --END--
-
內(nèi)存
+關(guān)注
關(guān)注
8文章
3108瀏覽量
74984 -
C語言
+關(guān)注
關(guān)注
180文章
7630瀏覽量
140296 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4369瀏覽量
64187 -
數(shù)組
+關(guān)注
關(guān)注
1文章
419瀏覽量
26368 -
結(jié)構(gòu)體
+關(guān)注
關(guān)注
1文章
130瀏覽量
11030
原文標(biāo)題:C語言|柔性數(shù)組
文章出處:【微信號(hào):玩轉(zhuǎn)單片機(jī),微信公眾號(hào):玩轉(zhuǎn)單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
C語言中數(shù)組的用法

c語言二維數(shù)組定義及其規(guī)則詳解

c語言之字符數(shù)組詳解
C語言數(shù)組詳解

評(píng)論