柔性數(shù)組在實際中應用還是挺多的,看過上一篇文章分享一種靈活性很高的協(xié)議格式(附代碼例子)的小伙伴不知有沒有注意到我們有使用了柔性數(shù)組:
本篇文章我們就來一起學習柔性數(shù)組。
什么是柔性數(shù)組?
C99中,結(jié)構(gòu)體中的最后一個元素允許是未知大小的數(shù)組,這就叫作 柔性數(shù)組 。
柔性數(shù)組的特點:
結(jié)構(gòu)體中柔性數(shù)組成員前面必須至少有一個其他成員。
sizeof返回的這種結(jié)構(gòu)大小不包括柔性數(shù)組的內(nèi)存。
包含柔性數(shù)組成員的結(jié)構(gòu)用malloc()函數(shù)進行內(nèi)存的動態(tài)分配。
例子:
//微信公眾號:嵌入式大雜燴 #include#include #include typedefstruct_data { intlen; charval[]; }data_t; intmain(intarc,char*argv[]) { data_ttest_data1={0}; printf("sizeof(data_t)=%ld ",sizeof(data_t)); char*src_data="helloflexiblearr"; //為結(jié)構(gòu)體及其柔性數(shù)組成員申請一塊連續(xù)的空間 intlen=strlen(src_data)+1; data_t*p_test_data2=(data_t*)malloc(sizeof(data_t)+sizeof(char)*len); if(NULL==p_test_data2) { printf("mallocp_test_data2error "); returnEXIT_FAILURE; } //填充結(jié)構(gòu)體 p_test_data2->len=len; strncpy(p_test_data2->val,src_data,p_test_data2->len); printf("p_test_data2->val=%s ",p_test_data2->val); //釋放內(nèi)存 free(p_test_data2); p_test_data2=NULL; return0; }
編譯、運行:
下面我們一起通過實例來認識柔性數(shù)組的優(yōu)點。
柔性數(shù)組與指針的區(qū)別?
上一節(jié)的協(xié)議格式結(jié)構(gòu)體其實可以又如下兩種創(chuàng)建方式:
value字段以柔性數(shù)組的方式定義:
typedefstruct_protocol_format { uint16_thead; uint8_tid; uint8_ttype; uint8_tlength; uint8_tvalue[]; }protocol_format_t;
value字段以指針的方式定義:
typedefstruct_protocol_format { uint16_thead; uint8_tid; uint8_ttype; uint8_tlength; uint8_t*value; }protocol_format_t;
(1)結(jié)構(gòu)體占用空間
柔性數(shù)組的方式結(jié)構(gòu)體占用較指針的方式少。
柔性數(shù)組方式:
指針方式:
(2)代碼簡潔及訪問速度方面
柔性數(shù)組的方式相對與指針的方式更為簡潔,柔性數(shù)組的方式只需要申請一次空間,給結(jié)構(gòu)體申請空間的同時也給柔性數(shù)組申請空間;而指針的方式,除了給結(jié)構(gòu)體申請空間之外,還得給結(jié)構(gòu)體里的指針成員申請空間。
柔性數(shù)組方式:
指針方式:
使用指針的方式寫代碼會比柔性數(shù)組的方式會繁瑣一些,特別地,如果在釋放內(nèi)存的時候把順序弄反了,則結(jié)構(gòu)體里的指針成員所指向的內(nèi)存就釋放不掉,會造成內(nèi)存泄露。
柔性數(shù)組的方式只需要申請一次空間,是一塊連續(xù)的空間;而指針的方式,申請的兩塊空間不是連續(xù)的。連續(xù)的內(nèi)存有益于提高訪問速度。
當然,前面介紹柔性數(shù)組的時候有說到,柔性數(shù)組是在C99標準及之后才有的,如果你的編譯器還是比較古老的,那還是選用指針的方式,通用性也會比較好。
審核編輯:劉清
-
指針
+關(guān)注
關(guān)注
1文章
484瀏覽量
71167 -
編譯器
+關(guān)注
關(guān)注
1文章
1661瀏覽量
50172 -
C99
+關(guān)注
關(guān)注
0文章
4瀏覽量
6394
原文標題:柔性數(shù)組在實際項目中的應用?
文章出處:【微信號:wenzi嵌入式軟件,微信公眾號:wenzi嵌入式軟件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
JMC1200T柔性和可扭轉(zhuǎn)波導JUPITER
3D打印柔性材料有哪些?全面解析主流柔性耗材類型

FPC柔性電子標簽介紹和應用

柔性網(wǎng)線和非柔性網(wǎng)線區(qū)別有哪些
Molex 蜂窩柔性天線的特性和優(yōu)點-赫聯(lián)電子
數(shù)組的下標為什么可以是負數(shù)

柔性電子技術(shù)賦能各行各業(yè),開啟全新發(fā)展階段,中國柔性電子行業(yè)代表企業(yè)綠展科技,持續(xù)創(chuàng)新柔性電子技術(shù)及應用產(chǎn)品

數(shù)組名之間可以直接賦值嗎
指針數(shù)組和二維數(shù)組有沒有區(qū)別

革命性的電子技術(shù):柔性電子,讓科技更貼合生活的神奇技術(shù)。國內(nèi)柔性電子龍頭企業(yè)有綠展科技等 #柔性電子

labview字符串數(shù)組轉(zhuǎn)化為數(shù)值數(shù)組
面試常考+1:函數(shù)指針與指針函數(shù)、數(shù)組指針與指針數(shù)組

評論