女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

什么是柔性數組?柔性數組有何優點

工程師鄧生 ? 來源:嵌入式大雜燴 ? 作者:ZhengNL ? 2022-09-14 10:34 ? 次閱讀

柔性數組在實際中應用還是挺多的,看過上一篇文章分享一種靈活性很高的協議格式(附代碼例子)的小伙伴不知有沒有注意到我們有使用了柔性數組:

867e70b0-3371-11ed-ba43-dac502259ad0.png

本篇文章我們就來一起學習柔性數組。

什么是柔性數組?

C99中,結構體中的最后一個元素允許是未知大小的數組,這就叫作 柔性數組

柔性數組的特點:

結構體中柔性數組成員前面必須至少有一個其他成員。

sizeof返回的這種結構大小不包括柔性數組的內存。

包含柔性數組成員的結構用malloc()函數進行內存的動態分配。

例子:

//微信公眾號:嵌入式大雜燴
#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";

//為結構體及其柔性數組成員申請一塊連續的空間
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;
}

//填充結構體
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);

//釋放內存
free(p_test_data2);
p_test_data2=NULL;

return0;
}

編譯、運行:

8695daca-3371-11ed-ba43-dac502259ad0.png

下面我們一起通過實例來認識柔性數組的優點。

柔性數組與指針的區別?

上一節的協議格式結構體其實可以又如下兩種創建方式:

value字段以柔性數組的方式定義:

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)結構體占用空間

柔性數組的方式結構體占用較指針的方式少。

柔性數組方式:

86a5feb4-3371-11ed-ba43-dac502259ad0.png

指針方式:

86b977be-3371-11ed-ba43-dac502259ad0.png

(2)代碼簡潔及訪問速度方面

柔性數組的方式相對與指針的方式更為簡潔,柔性數組的方式只需要申請一次空間,給結構體申請空間的同時也給柔性數組申請空間;而指針的方式,除了給結構體申請空間之外,還得給結構體里的指針成員申請空間。

柔性數組方式:

86ccd46c-3371-11ed-ba43-dac502259ad0.png

指針方式:

86e4f7f4-3371-11ed-ba43-dac502259ad0.png

使用指針的方式寫代碼會比柔性數組的方式會繁瑣一些,特別地,如果在釋放內存的時候把順序弄反了,則結構體里的指針成員所指向的內存就釋放不掉,會造成內存泄露。

柔性數組的方式只需要申請一次空間,是一塊連續的空間;而指針的方式,申請的兩塊空間不是連續的。連續的內存有益于提高訪問速度。

當然,前面介紹柔性數組的時候有說到,柔性數組是在C99標準及之后才有的,如果你的編譯器還是比較古老的,那還是選用指針的方式,通用性也會比較好。




審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 指針
    +關注

    關注

    1

    文章

    484

    瀏覽量

    71002
  • 編譯器
    +關注

    關注

    1

    文章

    1655

    瀏覽量

    49891
  • C99
    C99
    +關注

    關注

    0

    文章

    4

    瀏覽量

    6360

原文標題:柔性數組在實際項目中的應用?

文章出處:【微信號:wenzi嵌入式軟件,微信公眾號:wenzi嵌入式軟件】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

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

    什么是FPC標簽?FPC標簽,即柔性電子標簽,基于柔性印刷電路板(FlexiblePrintedCircuit,FPC)技術制作而成。與傳統剛性標簽不同,FPC標簽具有超薄、彎曲性強等優點,非常適合
    的頭像 發表于 03-03 14:40 ?633次閱讀
    FPC<b class='flag-5'>柔性</b>電子標簽介紹和應用

    柔性網線和非柔性網線區別有哪些

    ,外部覆蓋一層柔軟的PVC材料或其他柔軟的保護層。 非柔性網線(常規網線): 定義:非柔性網線是傳統的網絡連接線,通常不具備柔性網線的靈活性和彎曲性能。 結構:可能包括雙絞線(如超五類、六類雙絞線)、同軸電纜等,外部
    的頭像 發表于 01-09 10:10 ?669次閱讀

    Molex 蜂窩柔性天線的特性和優點-赫聯電子

      Molex蜂窩柔性天線支持不斷發展的LTE和4G蜂窩技術。該器件采用平衡的傳輸設計,可通過消除額外的電路、頻率調諧和電子元件集成,最大限度地減少地面-平面效應、降低成本并減少所需的工程資源。該
    發表于 12-30 11:19

    數組的下標為什么可以是負數

    最近有同學發來這樣一段代碼,并提出一個問題,數組的下標為什么可以是負數? ? ? #include int main(){ const char *s = "helloworld"; const
    的頭像 發表于 12-20 11:18 ?442次閱讀

    柔性電子技術和智能面膜 #柔性電子 #印刷電子 #綠展科技

    柔性電子
    綠展科技
    發布于 :2024年11月28日 20:16:50

    數組名之間可以直接賦值嗎

    數組之間的賦值能不能直接使用等于號?比如這樣的代碼。 int main(){ int a[5] = {1, 2, 3, 4, 5}; int b[5] = {0}; b = a
    的頭像 發表于 11-26 11:23 ?512次閱讀

    指針數組和二維數組有沒有區別

    。 首先是指針數組 s1。 s1 本身是個一維數組數組三個元素,每個元素都是個指針。如果是 64 位系統,三個指針就占了 24 個字節。 使用 sizeof 計算 s1 的大小,結
    的頭像 發表于 11-24 11:12 ?482次閱讀

    C語言數組應用計算機導論A第6講:數組

    C語言數組應用計算機導論A第6講:數組
    發表于 11-20 15:33 ?0次下載

    labview字符串數組轉化為數值數組

    在LabVIEW中,將字符串數組轉換為數值數組是一項常見的任務,尤其是在處理數據采集、信號處理或用戶輸入時。 1. 理解LabVIEW的數據類型 在開始之前,了解LabVIEW中的數據類型是非
    的頭像 發表于 09-04 17:47 ?4886次閱讀

    面試常考+1:函數指針與指針函數、數組指針與指針數組

    在嵌入式開發領域,函數指針、指針函數、數組指針和指針數組是一些非常重要但又容易混淆的概念。理解它們的特性和應用場景,對于提升嵌入式程序的效率和質量至關重要。一、指針函數與函數指針指針函數:定義:指針
    的頭像 發表于 08-10 08:11 ?1336次閱讀
    面試常考+1:函數指針與指針函數、<b class='flag-5'>數組</b>指針與指針<b class='flag-5'>數組</b>

    柔性制造單元及柔性的定義

    柔性制造單元(Flexible Manufacturing Cell,簡稱FMC)是一種高度自動化的生產系統,它能夠根據生產需求的變化快速調整生產過程,以適應不同產品、不同批量的生產。柔性制造單元
    的頭像 發表于 06-11 09:42 ?2481次閱讀

    柔性制造系統的柔性體現在哪些方面

    柔性制造系統(Flexible Manufacturing System,簡稱FMS)是一種自動化的生產系統,它能夠根據生產需求的變化,靈活地調整生產線的布局、工藝流程和生產設備,以滿足不同產
    的頭像 發表于 06-11 09:16 ?1473次閱讀