91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是柔性數(shù)組?柔性數(shù)組有何優(yōu)點(diǎn)

工程師鄧生 ? 來(lái)源:嵌入式大雜燴 ? 作者:ZhengNL ? 2022-09-14 10:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

本篇文章我們就來(lái)一起學(xué)習(xí)柔性數(shù)組。

什么是柔性數(shù)組?

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)分配。

例子:

//微信公眾號(hào):嵌入式大雜燴
#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ù)組成員申請(qǐng)一塊連續(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;
}

編譯、運(yùn)行:

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

下面我們一起通過(guò)實(shí)例來(lái)認(rèn)識(shí)柔性數(shù)組的優(yōu)點(diǎn)。

柔性數(shù)組與指針的區(qū)別?

上一節(jié)的協(xié)議格式結(jié)構(gòu)體其實(shí)可以又如下兩種創(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ù)組方式:

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

指針?lè)绞剑?/strong>

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

(2)代碼簡(jiǎn)潔及訪問(wèn)速度方面

柔性數(shù)組的方式相對(duì)與指針的方式更為簡(jiǎn)潔,柔性數(shù)組的方式只需要申請(qǐng)一次空間,給結(jié)構(gòu)體申請(qǐng)空間的同時(shí)也給柔性數(shù)組申請(qǐng)空間;而指針的方式,除了給結(jié)構(gòu)體申請(qǐng)空間之外,還得給結(jié)構(gòu)體里的指針成員申請(qǐng)空間。

柔性數(shù)組方式:

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

指針?lè)绞剑?/strong>

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

使用指針的方式寫(xiě)代碼會(huì)比柔性數(shù)組的方式會(huì)繁瑣一些,特別地,如果在釋放內(nèi)存的時(shí)候把順序弄反了,則結(jié)構(gòu)體里的指針成員所指向的內(nèi)存就釋放不掉,會(huì)造成內(nèi)存泄露。

柔性數(shù)組的方式只需要申請(qǐng)一次空間,是一塊連續(xù)的空間;而指針的方式,申請(qǐng)的兩塊空間不是連續(xù)的。連續(xù)的內(nèi)存有益于提高訪問(wèn)速度。

當(dāng)然,前面介紹柔性數(shù)組的時(shí)候有說(shuō)到,柔性數(shù)組是在C99標(biāo)準(zhǔn)及之后才有的,如果你的編譯器還是比較古老的,那還是選用指針的方式,通用性也會(huì)比較好。




審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 指針
    +關(guān)注

    關(guān)注

    1

    文章

    484

    瀏覽量

    71843
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1672

    瀏覽量

    51580
  • C99
    C99
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    6504

原文標(biāo)題:柔性數(shù)組在實(shí)際項(xiàng)目中的應(yīng)用?

文章出處:【微信號(hào):wenzi嵌入式軟件,微信公眾號(hào):wenzi嵌入式軟件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    RT-Thread Vector軟件包:嵌入式開(kāi)發(fā)的動(dòng)態(tài)數(shù)組容器 | 技術(shù)集結(jié)

    RT-Thread Vector軟件包:嵌入式開(kāi)發(fā)的動(dòng)態(tài)數(shù)組容器 | 技術(shù)集結(jié)
    的頭像 發(fā)表于 01-25 09:33 ?5373次閱讀
    RT-Thread Vector軟件包:嵌入式開(kāi)發(fā)的動(dòng)態(tài)<b class='flag-5'>數(shù)組</b>容器 | 技術(shù)集結(jié)

    從FFC到背光驅(qū)動(dòng):Parlex柔性互連解析

    在消費(fèi)電子、工業(yè)控制和顯示系統(tǒng)中,柔性扁平線(FFC/FPC)早已成為高密度、輕薄化設(shè)計(jì)的重要組成部分。Parlex USA LLC 作為柔性互連領(lǐng)域的專業(yè)廠商,其柔性扁平線技術(shù)被廣泛應(yīng)用于顯示模組、背光驅(qū)動(dòng)、電源與信號(hào)混合傳輸
    的頭像 發(fā)表于 01-24 15:22 ?1632次閱讀

    keil中c語(yǔ)言的動(dòng)態(tài)分配內(nèi)存

    的: 那么問(wèn)題來(lái)了,既然不用柔性數(shù)組成員也可以達(dá)到同樣的效果,那么柔性數(shù)組成員的意義何在? 仔細(xì)分析我們就能發(fā)現(xiàn),使用柔性
    發(fā)表于 01-21 06:04

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

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

    柔性天線技術(shù)原理及核心特性

    柔性天線的定義與工作原理 柔性天線是一種基于柔性基材(如聚酰亞胺、PET或透明導(dǎo)電膜)的無(wú)線通信天線,其核心功能是通過(guò)無(wú)線電波實(shí)現(xiàn)信號(hào)的接收和傳輸。其工作原理與傳統(tǒng)天線類似,但在結(jié)構(gòu)設(shè)計(jì)上更加輕便
    發(fā)表于 12-05 09:10

    求助!IMU選剛性還是柔性?復(fù)雜場(chǎng)景快愁哭了

    #IMU選型 #工程監(jiān)測(cè) 做老舊隧道監(jiān)測(cè)的來(lái)求助!之前用剛性IMU,隧道里震動(dòng)就容易飄數(shù)據(jù),換了兩臺(tái)都沒(méi)解決,老板快把我罵哭了? 聽(tīng)朋友說(shuō)全柔性IMU靠譜,說(shuō)能像創(chuàng)可貼一樣貼在隧道壁上,抗震動(dòng)抗
    發(fā)表于 11-25 17:02

    數(shù)組的初體驗(yàn)

    袋中的物品是按一定順序放置的。 1.我們來(lái)看一下如何聲明一個(gè)數(shù)組: 數(shù)據(jù)類型 數(shù)組名稱[長(zhǎng)度]; 數(shù)組只聲明也不行啊,看一下數(shù)組是如何初始化的。說(shuō)到初始化,C語(yǔ)言中的
    發(fā)表于 11-25 08:06

    二維數(shù)組介紹

    大家不要認(rèn)為二維數(shù)組在內(nèi)存中就是按行、列這樣二維存儲(chǔ)的,實(shí)際上,不管二維、三維數(shù)組… 都是編譯器的語(yǔ)法糖。 存儲(chǔ)上和一維數(shù)組沒(méi)有本質(zhì)區(qū)別,舉個(gè)例子: int array[3][3
    發(fā)表于 11-25 07:42

    Molex推出蜂窩柔性天線的特性與優(yōu)勢(shì)-赫聯(lián)電子

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

    柔性屏彎折試驗(yàn)機(jī):守護(hù)柔性顯示時(shí)代的 “耐用密碼”

    彎折試驗(yàn)機(jī)的存在意味著更可靠的使用體驗(yàn);對(duì)于產(chǎn)業(yè)來(lái)說(shuō),它則是推動(dòng)柔性顯示技術(shù)迭代的隱形基石。在這場(chǎng)屏幕形態(tài)的變革中,每一臺(tái)不停運(yùn)轉(zhuǎn)的彎折試驗(yàn)機(jī),都在為柔性屏的 “耐用性” 寫(xiě)下最嚴(yán)謹(jǐn)?shù)淖⒛_。
    的頭像 發(fā)表于 08-06 14:02 ?852次閱讀
    <b class='flag-5'>柔性</b>屏彎折試驗(yàn)機(jī):守護(hù)<b class='flag-5'>柔性</b>顯示時(shí)代的 “耐用密碼”

    TE鎖定型柔性印刷電連接器優(yōu)勢(shì)?-赫聯(lián)電子

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

    JMC1200T柔性和可扭轉(zhuǎn)波導(dǎo)JUPITER

    JMC1200T柔性和可扭轉(zhuǎn)波導(dǎo)JUPITERJMC1200T是由JUPITER生產(chǎn)的柔性和可扭轉(zhuǎn)波導(dǎo),主要用于高頻率(微波)數(shù)據(jù)傳輸?shù)牟▽?dǎo)組件,兼具柔性和可扭轉(zhuǎn)性能,適用于各種復(fù)雜應(yīng)用環(huán)境和動(dòng)態(tài)
    發(fā)表于 07-10 09:38

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

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

    stm32 DMA串口接收到數(shù)組數(shù)組元素順序錯(cuò)亂怎么解決?

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