国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

    瀏覽量

    71843
  • 編譯器
    +關注

    關注

    1

    文章

    1672

    瀏覽量

    51597
  • C99
    C99
    +關注

    關注

    0

    文章

    4

    瀏覽量

    6504

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    RT-Thread Vector軟件包:嵌入式開發的動態數組容器 | 技術集結

    RT-Thread Vector軟件包:嵌入式開發的動態數組容器 | 技術集結
    的頭像 發表于 01-25 09:33 ?5375次閱讀
    RT-Thread Vector軟件包:嵌入式開發的動態<b class='flag-5'>數組</b>容器 | 技術集結

    從FFC到背光驅動:Parlex柔性互連解析

    在消費電子、工業控制和顯示系統中,柔性扁平線(FFC/FPC)早已成為高密度、輕薄化設計的重要組成部分。Parlex USA LLC 作為柔性互連領域的專業廠商,其柔性扁平線技術被廣泛應用于顯示模組、背光驅動、電源與信號混合傳輸
    的頭像 發表于 01-24 15:22 ?1638次閱讀

    keil中c語言的動態分配內存

    的: 那么問題來了,既然不用柔性數組成員也可以達到同樣的效果,那么柔性數組成員的意義何在? 仔細分析我們就能發現,使用柔性
    發表于 01-21 06:04

    客戶案例分享 | 柔性屏廣告機背后功臣,防水高速不松脫就看這款連接器

    柔性屏廣告機上的USB連接器作用?01本地播放傳輸入口對于部署在戶外無網絡場景或者擔心網絡病毒入侵無公網接入的柔性屏,USB接口連接器是廣告內容接入更適宜的方
    的頭像 發表于 01-06 18:46 ?228次閱讀
    客戶案例分享 | <b class='flag-5'>柔性</b>屏廣告機背后功臣,防水高速不松脫就看這款連接器

    柔性天線技術原理及核心特性

    柔性天線的定義與工作原理 柔性天線是一種基于柔性基材(如聚酰亞胺、PET或透明導電膜)的無線通信天線,其核心功能是通過無線電波實現信號的接收和傳輸。其工作原理與傳統天線類似,但在結構設計上更加輕便
    發表于 12-05 09:10

    求助!IMU選剛性還是柔性?復雜場景快愁哭了

    #IMU選型 #工程監測 做老舊隧道監測的來求助!之前用剛性IMU,隧道里震動就容易飄數據,換了兩臺都沒解決,老板快把我罵哭了? 聽朋友說全柔性IMU靠譜,說能像創可貼一樣貼在隧道壁上,抗震動抗
    發表于 11-25 17:02

    數組的初體驗

    袋中的物品是按一定順序放置的。 1.我們來看一下如何聲明一個數組: 數據類型 數組名稱[長度]; 數組只聲明也不行啊,看一下數組是如何初始化的。說到初始化,C語言中的
    發表于 11-25 08:06

    二維數組介紹

    大家不要認為二維數組在內存中就是按行、列這樣二維存儲的,實際上,不管二維、三維數組… 都是編譯器的語法糖。 存儲上和一維數組沒有本質區別,舉個例子: int array[3][3
    發表于 11-25 07:42

    Molex推出蜂窩柔性天線的特性與優勢-赫聯電子

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

    柔性屏彎折試驗機:守護柔性顯示時代的 “耐用密碼”

    彎折試驗機的存在意味著更可靠的使用體驗;對于產業來說,它則是推動柔性顯示技術迭代的隱形基石。在這場屏幕形態的變革中,每一臺不停運轉的彎折試驗機,都在為柔性屏的 “耐用性” 寫下最嚴謹的注腳。
    的頭像 發表于 08-06 14:02 ?854次閱讀
    <b class='flag-5'>柔性</b>屏彎折試驗機:守護<b class='flag-5'>柔性</b>顯示時代的 “耐用密碼”

    TE鎖定型柔性印刷電連接器優勢?-赫聯電子

      TE Connectivity(TE)推出的新型0.5mm鎖定式柔性印刷電路(FPC)連接器可提供牢固的固定,以防止在惡劣環境中使用時意外脫開。   這些FPC連接器的型號為2041215-1
    發表于 07-21 12:53

    JMC1200T柔性和可扭轉波導JUPITER

    JMC1200T柔性和可扭轉波導JUPITERJMC1200T是由JUPITER生產的柔性和可扭轉波導,主要用于高頻率(微波)數據傳輸的波導組件,兼具柔性和可扭轉性能,適用于各種復雜應用環境和動態
    發表于 07-10 09:38

    3D打印柔性材料哪些?全面解析主流柔性耗材類型

    3D打印柔性材料主要包括TPU(高彈性、耐磨)、TPE(超柔軟、高伸長率)和柔性PLA(易打印、適合新手)三大類,硬度范圍覆蓋60A-95A,可滿足工業、醫療、消費電子等領域需求。
    的頭像 發表于 04-21 11:14 ?2726次閱讀
    3D打印<b class='flag-5'>柔性</b>材料<b class='flag-5'>有</b>哪些?全面解析主流<b class='flag-5'>柔性</b>耗材類型

    stm32 DMA串口接收到數組數組元素順序錯亂怎么解決?

    數據。理論上講上位機發送數據的數量和順序都是固定的——比如AABA,可是現在有干擾——一次上位機多發送了一個數據——變成了CAABA,根據DMA循環原理,存到數組里的數據就變成了AAAB——并且還是根據
    發表于 03-12 08:02