在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

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

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

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

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

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

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

柔性數(shù)組的特點:

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

sizeof返回的這種結構大小不包括柔性數(shù)組的內(nèi)存。

包含柔性數(shù)組成員的結構用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";

//為結構體及其柔性數(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;
}

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

編譯、運行:

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

下面我們一起通過實例來認識柔性數(shù)組的優(yōu)點。

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

上一節(jié)的協(xié)議格式結構體其實可以又如下兩種創(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)結構體占用空間

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

柔性數(shù)組方式:

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

指針方式:

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

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

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

柔性數(shù)組方式:

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

指針方式:

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

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

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

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




審核編輯:劉清

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

    關注

    1

    文章

    484

    瀏覽量

    70916
  • 編譯器
    +關注

    關注

    1

    文章

    1652

    瀏覽量

    49743
  • C99
    C99
    +關注

    關注

    0

    文章

    4

    瀏覽量

    6327

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

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

收藏 人收藏

    評論

    相關推薦

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

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

    柔性網(wǎng)線和非柔性網(wǎng)線區(qū)別有哪些

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

    Molex 蜂窩柔性天線的特性和優(yōu)點-赫聯(lián)電子

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

    數(shù)組的下標為什么可以是負數(shù)

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

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

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

    數(shù)組名之間可以直接賦值嗎

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

    指針數(shù)組和二維數(shù)組有沒有區(qū)別

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

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

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

    labview字符串數(shù)組轉化為數(shù)值數(shù)組

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

    面試常考+1:函數(shù)指針與指針函數(shù)、數(shù)組指針與指針數(shù)組

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

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

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

    嵌入式中零長度數(shù)組基本操作方法

    C語言零長度數(shù)組,聽起來可能有點奇怪,因為它沒有分配內(nèi)存空間,無法存儲數(shù)據(jù)。但實際上,零長度數(shù)組在Linux內(nèi)核中隨處可見。 零長度數(shù)組的定義 首先,我們要明白什么是零長度數(shù)組。簡單來
    的頭像 發(fā)表于 05-11 08:49 ?1303次閱讀
    嵌入式中零長度<b class='flag-5'>數(shù)組</b>基本操作方法
    主站蜘蛛池模板: 久久综合九色欧美综合狠狠 | 色多多在线 | 91在线国内在线播放大神 | 男操女视频网站 | 欧美色香蕉 | 欧美二区三区 | 欧美日韩精品乱国产 | 在线观看免费国产 | 大色综合色综合网站 | 日本成人一级片 | 午夜福利毛片 | 性视频网| 亚洲欧美国产五月天综合 | 在线免费观看毛片网站 | 国产午夜毛片v一区二区三区 | 色吧在线视频在线观看 | 久久这里精品青草免费 | 亚洲综合色婷婷在线观看 | 手机看片福利盒子久久 | 欧洲一卡二卡乱码新区 | 一本到在线观看视频不卡 | 天天干天天操天天做 | 四虎影库在线播放 | 精品女同同性视频很黄很色 | 天天拍天天射 | 国产婷婷一区二区三区 | 亚洲一区二区三区中文字幕 | 欧美性一级交视频 | 午夜精品福利在线 | 国产美女一区 | 五月天婷婷一区二区三区久久 | 两性色午夜视频免费老司机 | 欧美特黄一区二区三区 | 伊人久久大香线蕉电影院 | 五月激情在线 | 明星三级国产免费播放 | 来吧成人综合网 | 欧美精品色精品一区二区三区 | 欧美卡一卡二卡新区网站 | 毛片大全免费 | 五月天婷婷免费观看视频在线 |