色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

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

3天內不再提示

柔性數組與指針的區別

我快閉嘴 ? 來源:嵌入式大雜燴 ? 作者:ZhengNL ? 2022-09-02 15:32 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

02ba2d8e-29e2-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;
}

編譯、運行:

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

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

柔性數組方式:

02f9d02e-29e2-11ed-ba43-dac502259ad0.png

指針方式:

0315dae4-29e2-11ed-ba43-dac502259ad0.png

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

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

柔性數組方式:

033113f4-29e2-11ed-ba43-dac502259ad0.png

指針方式:

035cc562-29e2-11ed-ba43-dac502259ad0.png

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

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

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

以上就是本次的分享,期待你的點贊、收藏、轉發!

審核編輯:湯梓紅


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

    關注

    5153

    文章

    19708

    瀏覽量

    318040
  • 指針
    +關注

    關注

    1

    文章

    484

    瀏覽量

    71218
  • 數組
    +關注

    關注

    1

    文章

    420

    瀏覽量

    26622
  • C99
    C99
    +關注

    關注

    0

    文章

    4

    瀏覽量

    6406

原文標題:如何在嵌入式項目中使用柔性數組?

文章出處:【微信號:工程師進階筆記,微信公眾號:工程師進階筆記】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    C語言數組指針區別

    大家好,我是嵌入式老林,從事嵌入式軟件開發多年,今天分享的內容是C語言數組指針區別,希望能對你有所幫助。
    發表于 07-11 12:40 ?548次閱讀
    C語言<b class='flag-5'>數組</b>和<b class='flag-5'>指針</b>的<b class='flag-5'>區別</b>

    C語言中指針數組數組指針區別

    指針數組之間存在著緊密的關系。在本文中,我們將探討指針數組的關系、指針算術和數組遍歷、多維
    發表于 08-17 15:29 ?637次閱讀

    指針數組數組指針區別

    int (*p)[4];// 定義一個數組指針,指向含4個元素的一維數組數組元素是int類型。int *p[4];// 定義一個指針
    發表于 07-15 21:41

    指針數組數組指針及其函數指針有何區別

    進程的五種狀態模型分別是哪些呢?指針數組數組指針及其函數指針有何區別呢?
    發表于 12-24 07:28

    指針數組數組指針有什么區別和聯系呢

    什么是指針數組數組指針指針數組數組
    發表于 12-24 06:55

    指針數組都是C語言的精髓所在 兩者有何聯系區別

    指針數組都是C語言的精髓所在,對于很多C程序員來說,如果你問這樣一個問題:數組指針有什么區別?他們的答案很可能是:”
    的頭像 發表于 05-27 14:51 ?4558次閱讀
    <b class='flag-5'>指針</b>和<b class='flag-5'>數組</b>都是C語言的精髓所在 兩者有何聯系<b class='flag-5'>區別</b>

    詳談數組指針區別與聯系

    詳談數組指針區別與聯系
    的頭像 發表于 06-29 15:18 ?2.3w次閱讀
    詳談<b class='flag-5'>數組</b>和<b class='flag-5'>指針</b>的<b class='flag-5'>區別</b>與聯系

    指針數組數組指針區別

    這里我們區分兩個重要的概念:指針數組數組指針
    的頭像 發表于 06-29 15:30 ?2.1w次閱讀
    <b class='flag-5'>指針</b><b class='flag-5'>數組</b>和<b class='flag-5'>數組</b><b class='flag-5'>指針</b>的<b class='flag-5'>區別</b>

    理解函數指針、函數指針數組、函數指針數組指針

    理解函數指針、函數指針數組、函數指針數組指針
    的頭像 發表于 06-29 15:38 ?1.5w次閱讀
    理解函數<b class='flag-5'>指針</b>、函數<b class='flag-5'>指針</b><b class='flag-5'>數組</b>、函數<b class='flag-5'>指針</b><b class='flag-5'>數組</b>的<b class='flag-5'>指針</b>

    C語言指針數組區別

    在C語言教程中我們使用通過數組名通過偏移和指針偏移都可以遍歷數組,那么指針數組到底有什么區別?
    的頭像 發表于 07-18 16:29 ?2303次閱讀

    二維數組數組指針以及指針數組

    二維數組數組指針以及指針數組
    的頭像 發表于 08-16 09:02 ?3189次閱讀

    C語言中的char數組和char指針有什么區別

    讓我們通過下面的例子,來了解 C語言中字符數組和字符指針之間的區別
    的頭像 發表于 01-29 16:35 ?3237次閱讀

    數組指針不能混用的情況

    數組指針不能混用的情況? 數組指針是 C/C++ 中非常常見的特性和概念。然而,在某些情況下,數組
    的頭像 發表于 12-07 13:46 ?974次閱讀

    數組指針不相同嗎?數組指針有哪些區別

    數組就是指針指針就是數組,這樣的言論在評論區看到不下于10次。
    的頭像 發表于 12-13 16:34 ?2139次閱讀
    <b class='flag-5'>數組</b>和<b class='flag-5'>指針</b>不相同嗎?<b class='flag-5'>數組</b>和<b class='flag-5'>指針</b>有哪些<b class='flag-5'>區別</b>

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

    指針數組和二維數組有沒有區別?比如這樣的兩個代碼。 int main(){ char *s1[] = { "hello", "world", "total" }; char s2[][
    的頭像 發表于 11-24 11:12 ?552次閱讀
    主站蜘蛛池模板: 色戒在线完整观看在线播放版 | 特级aa 毛片免费观看 | 欧美特级特黄AAAAA片 | 亚洲欧美综合乱码精品成人网 | 亚洲狠狠网站色噜噜 | 无码人妻99久久密AV | 99爱在线精品视频免费观看9 | 麻豆乱码一卡二卡三卡视频 | 被同桌摸出水来了好爽的视频 | 亚洲国产精品无码中文字幕 | 漂亮的保姆3集电影免费观看中文 | 99E久热只有精品8在线直播 | 性色AV一区二区三区V视界影院 | 亚洲伊人情人综合网站 | 亚洲一区在线观看无码欧美 | 亚洲欧美另类无码专区 | 亚洲精品久久久一区 | 美女裸露100%奶头视频 | 69夫妇交友群 | 高中生被C到爽哭视频免费 高挑人妻无奈张开腿 | 在线亚洲黄色 | 2019伊人查蕉在线观看 | 成人在线视频免费观看 | yellow日本动漫免费观看 | 免费视频国产在线观看网站 | 好湿好滑好硬好爽好深视频 | 欲乱艳荡少寡妇全文免费 | 国产亚洲欧洲日韩在线三区 | 真实的强视频免费网站 | 好男人在线观看免费视频WWW | 免费精品国产人妻国语麻豆 | 亚洲视频在线观看视频 | 亚洲成在人线视频 | 久久久久毛片免费观看 | 777久久人妻少妇嫩草AV蜜桃 | 日韩精品无码久久一区二区三 | 精品国产乱码久久久久久口爆 | 人人澡人人擦人人免费 | 久久精品免费看网站 | 一个人免费观看在线视频播放 | 99免费观看视频 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品