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

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

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

3天內不再提示

C語言柔性數組詳解

玩轉單片機 ? 來源:玩轉單片機 ? 2023-03-06 09:06 ? 次閱讀

下班寫文章難免會有些出錯,也感謝那些在后臺留言指出錯誤的讀者;表驅那篇推文存在數組越界問題,可以通過預先開辟一個大數組的方式解決,但這樣解決方式會存在資源浪費問題,如果想不浪費資源來解決數組溢出的問題,那就來看看柔性數組怎么樣!

|簡單介紹

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

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

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

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

#include
 
typedef struct 
{
    int length;
intarr[];
}data_t;
 
int main()
{
    data_t data1;
    printf("sizeof:%d
",sizeof(data1));
    return 0; 
}

注意:在DEV CPP中,屏蔽了第五行并不會報錯!

| 簡單使用

#include
#include


typedef struct 
{
    int length;
    int arr[];
}data_t;
 
int main()
{
    //為結構體及其柔性數組成員申請一塊連續的空間
    data_t *p=(data_t*)malloc(sizeof(data_t)+10*sizeof(int));
    if(NULL==p)
    {
        printf("malloc error
");
        return 0;
    }
    p->length=10;
    for(int i=0;ilength;i++)
    {
        p->arr[i]=i;//賦值
        printf("%d ",p->arr[i]);
    }
    printf("
");
    //重新調整所申請的空間,將柔性數組調整為40
    p=(data_t*)realloc(p,sizeof(int)+40);
    if(NULL==p)
    {
        printf("malloc error
");
        return 0;
    }
    p->length=40;
    for(int i=0;ilength;i++)
    {
        p->arr[i]=i;//賦值
        printf("%d ",p->arr[i]);
    }
    printf("
");
    //釋放內存
    free(p);
    p=NULL;
    return 0; 
}

| 優勢總結

柔性數組的特點在于只需要用一次malloc創建就可以,而且和結構體是在同一塊連續的空間,對比在結構體中放指針成員而言,可以減少內存碎片化,因為malloc申請的內存位置是任意的;柔性數組申請的內存更加集中,有利于查找使用;柔性數組只用開辟一次,有利于提高訪問速度;用malloc函數進行動態內存申請時,柔性數組的大小應該大于結構體的大小以便于柔性數組適應預期大小。 --END--

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

    關注

    8

    文章

    3055

    瀏覽量

    74338
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137739
  • 函數
    +關注

    關注

    3

    文章

    4346

    瀏覽量

    62979
  • 數組
    +關注

    關注

    1

    文章

    417

    瀏覽量

    26029
  • 結構體
    +關注

    關注

    1

    文章

    130

    瀏覽量

    10872

原文標題:C語言|柔性數組

文章出處:【微信號:玩轉單片機,微信公眾號:玩轉單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C語言數組詳解

    介紹C語言數組的知識點。
    的頭像 發表于 05-19 10:15 ?6398次閱讀

    C語言教程之查找數組中的最值

    C語言教程之查找數組中的最值,很好的C語言資料,快來學習吧。
    發表于 04-25 15:13 ?0次下載

    C語言學習數組的筆記

    C語言學習數組的筆記
    發表于 12-17 16:04 ?0次下載

    c語言二維數組定義及其規則詳解

    一維數組只有一個下標,,稱為一維數組,其數組元素也稱為單下標變量。在實際問題中有很多量是二維的或多維的,因此C語言允許構造多維
    發表于 11-16 08:49 ?2.2w次閱讀
    <b class='flag-5'>c</b><b class='flag-5'>語言</b>二維<b class='flag-5'>數組</b>定義及其規則<b class='flag-5'>詳解</b>

    c語言之字符數組詳解

    ",a[i][j]);}printf("\n");}} 在C語言中沒有專門的字符串變量,通常用一個字符數組來存放一個字符串。當把一個字符串存入數組時,也把結束符‘\0’存入
    發表于 11-16 10:22 ?2087次閱讀

    C語言數組詳解

    上述的語句把數組中第五個元素的值賦為 50.0。所有的數組都是以 0 作為它們第一個元素的索引,也被稱為基索引,數組的最后一個索引是數組的總大小減去 1。以下是上面所討論的
    的頭像 發表于 09-25 15:43 ?1.5w次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>數組</b><b class='flag-5'>詳解</b>

    為什么C語言函數不能返回數組

    C語言函數可以返回指針、結構體,為什么不能返回數組? 下面一步一步來分析: 1 函數不能返回數組C
    的頭像 發表于 03-29 11:18 ?2051次閱讀

    C語言指針和數組的區別

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

    C語言總結_數組全方位練習

    C語言數組的練習題:涉及到數組插入、數組刪除、數組下標數據的左移右移、
    的頭像 發表于 08-14 09:34 ?957次閱讀

    C語言總結_數組知識

    當前文章復盤C語言數組數組定義規則、數組空間類型、數組下標使用、
    的頭像 發表于 08-14 09:38 ?1349次閱讀

    C語言_數組的查找、替換、排序、拼接

    這篇文章主要是總結C語言的位運算幾個實戰例子,接著介紹數組的基本定義用法、數組排序、插入、拼接、刪除、字符串查找替換等。
    的頭像 發表于 08-14 09:48 ?2624次閱讀

    C語言-數組

    C語言數組是一個同類型數據的集合,主要用來存儲一堆同類型的數據。
    的頭像 發表于 08-14 09:59 ?1338次閱讀

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

    C99中,結構體中的最后一個元素允許是未知大小的數組,這就叫作 柔性數組
    的頭像 發表于 09-14 10:34 ?1313次閱讀

    C語言如何創建數組

    C語言是一種非常強大和靈活的編程語言,它提供了若干數據類型來存儲和操作數據。其中之一就是數組,它可以用來存儲一系列具有相同數據類型的元素。本文將詳細介紹如何在
    的頭像 發表于 11-24 10:08 ?2022次閱讀

    c語言數組怎么定義

    C語言中,數組是一種用來存儲相同類型元素的數據結構。它可以存儲多個元素,并通過一個共同的名稱來引用這些元素。數組是一種很重要的數據結構,可以用于解決很多實際的問題。 在
    的頭像 發表于 11-24 10:11 ?3279次閱讀
    主站蜘蛛池模板: 国产农村妇女毛片精品久久 | 午夜刺激爽爽视频免费观看 | 大量国产后进翘臀视频 | 四虎网站最新网址 | 国外免费精品视频在线观看 | 久久综合久久88 | 久在操 | 黄色网在线 | 天天碰天天干 | 午夜精品久久久久久久第一页 | 这里只有精品视频 | 明日花绮罗snis-862在线播放 | 久久狠狠躁免费观看 | 中文永久免费看电视网站入口 | 黄色一级片视频 | 好大好猛好爽好深视频免费 | 久久精品亚洲精品国产欧美 | 日本高免费观看在线播放 | 亚洲国产精品久久婷婷 | 欧美日韩精品乱国产 | 午夜精品国产 | 午夜欧美性视频在线播放 | 97伊人网| 亚洲日本视频在线观看 | 国产黄色在线看 | 色月丁香| 天天搞一搞 | 视频一本大道香蕉久在线播放 | 五月婷综合网 | 亚洲免费区| 可以免费看的黄色片 | 欧美深深色噜噜狠狠yyy | 天天做日日干 | 免费观看一级一片 | 高清性色生活片久久久 | 欧美色碰碰碰免费观看长视频 | 99久久99久久精品免费看子伦 | 天堂中文在线最新版地址 | 99久久网站 | 人色网 | 日韩一级欧美一级在线观看 |