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

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

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

C語言柔性數(shù)組詳解

玩轉(zhuǎn)單片機 ? 來源:玩轉(zhuǎn)單片機 ? 2023-03-06 09:06 ? 次閱讀

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

|簡單介紹

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

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

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

包含柔性數(shù)組成員的結(jié)構(gòu)用malloc()函數(shù)進行內(nèi)存的動態(tài)分配。

#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()
{
    //為結(jié)構(gòu)體及其柔性數(shù)組成員申請一塊連續(xù)的空間
    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("
");
    //重新調(diào)整所申請的空間,將柔性數(shù)組調(diào)整為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("
");
    //釋放內(nèi)存
    free(p);
    p=NULL;
    return 0; 
}

| 優(yōu)勢總結(jié)

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

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

    關(guān)注

    8

    文章

    2949

    瀏覽量

    73737
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7581

    瀏覽量

    135603
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4262

    瀏覽量

    62234
  • 數(shù)組
    +關(guān)注

    關(guān)注

    1

    文章

    412

    瀏覽量

    25862
  • 結(jié)構(gòu)體
    +關(guān)注

    關(guān)注

    1

    文章

    128

    瀏覽量

    10812

原文標題:C語言|柔性數(shù)組

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

收藏 人收藏

    評論

    相關(guān)推薦

    C語言數(shù)組詳解

    介紹C語言數(shù)組的知識點。
    的頭像 發(fā)表于 05-19 10:15 ?6214次閱讀

    C語言教程之查找數(shù)組中的最值

    C語言教程之查找數(shù)組中的最值,很好的C語言資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-25 15:13 ?0次下載

    C語言學(xué)習(xí)數(shù)組的筆記

    C語言學(xué)習(xí)數(shù)組的筆記
    發(fā)表于 12-17 16:04 ?0次下載

    c語言二維數(shù)組定義及其規(guī)則詳解

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

    c語言之字符數(shù)組詳解

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

    C語言數(shù)組詳解

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

    為什么C語言函數(shù)不能返回數(shù)組?

    C語言函數(shù)可以返回指針、結(jié)構(gòu)體,為什么不能返回數(shù)組? 下面一步一步來分析: 1 函數(shù)不能返回數(shù)組C
    的頭像 發(fā)表于 03-29 11:18 ?1945次閱讀

    C語言指針和數(shù)組的區(qū)別

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

    C語言總結(jié)_數(shù)組全方位練習(xí)

    C語言數(shù)組的練習(xí)題:涉及到數(shù)組插入、數(shù)組刪除、數(shù)組下標數(shù)據(jù)的左移右移、
    的頭像 發(fā)表于 08-14 09:34 ?841次閱讀

    C語言總結(jié)_數(shù)組知識

    當(dāng)前文章復(fù)盤C語言數(shù)組數(shù)組定義規(guī)則、數(shù)組空間類型、數(shù)組下標使用、
    的頭像 發(fā)表于 08-14 09:38 ?1248次閱讀

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

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

    C語言-數(shù)組

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

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

    C99中,結(jié)構(gòu)體中的最后一個元素允許是未知大小的數(shù)組,這就叫作 柔性數(shù)組 。
    的頭像 發(fā)表于 09-14 10:34 ?1214次閱讀

    C語言如何創(chuàng)建數(shù)組

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

    c語言數(shù)組怎么定義

    C語言中,數(shù)組是一種用來存儲相同類型元素的數(shù)據(jù)結(jié)構(gòu)。它可以存儲多個元素,并通過一個共同的名稱來引用這些元素。數(shù)組是一種很重要的數(shù)據(jù)結(jié)構(gòu),可以用于解決很多實際的問題。 在
    的頭像 發(fā)表于 11-24 10:11 ?2581次閱讀