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

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

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

C語言中的數(shù)組空間動態(tài)開辟

zzw_111_bit ? 來源:zzw_111_bit ? 作者:zzw_111_bit ? 2023-02-10 12:42 ? 次閱讀

C語言中的數(shù)組空間動態(tài)開辟

在C語言中,必不可少的需要使用到數(shù)組,通常為了動態(tài)的開辟數(shù)組空間,可以使用malloc函數(shù),在C++中可以使用new關(guān)鍵字進(jìn)行空間的動態(tài)開辟與回收,動態(tài)開辟空間的方法更加靈活,更能有效的根據(jù)需要開辟空間使用。

1、一維數(shù)組

一維數(shù)組最簡單,直接使用malloc函數(shù)就可以開辟,以int型數(shù)據(jù)為例,開辟一個(gè)連續(xù)空間使用。

#include
#include

void test(int *arr){
    for(int i=0;i<5;i++){
        printf("%d ",arr[i]);
    }
}
int main(){
    int nums=5;
    int *array=(int *)malloc(sizeof(int)*nums);
    for(int i=0;i<5;i++){
        array[i]=i;
    }
    test(array);
    return 0;
}

在這個(gè)例子中最后的結(jié)果輸出為0 1 2 3 4;C語言中,數(shù)組變量可以看作一個(gè)指針,通過malloc將開辟空間的返回值返回給數(shù)組指針,從而可以通過隨機(jī)訪問修改和查詢數(shù)組中的值。

2、二維數(shù)組

二維數(shù)組可以看作一維數(shù)組的延申,在上一個(gè)例子一維數(shù)組中,每一個(gè)一維數(shù)據(jù)是一個(gè)int型變量,而二維數(shù)組中,將上一個(gè)例子中每一個(gè)一維變量變?yōu)橐粋€(gè) int * 變量,也就是一個(gè)指針,指向另一個(gè)開辟的動態(tài)一位空間,可以理解為一維數(shù)組的一維數(shù)組(套娃)。

#include
#include

using namespace std;

void demotest(int **mat){
    for(int i=0;i<4;i++){
        for(int j=0;j<4;j++){
            cout<" ";
        }
        cout<<endl;
    }
}

int main(){
    int rows=4;
    int columns=4;
    int **matrix=(int **)malloc(rows*sizeof(int *));
    for(int i=0;iint *)malloc(columns*sizeof(int));
    }
    for(int i=0;ifor(int j=0;jreturn 0;
}

在這個(gè)例子中,將二維數(shù)組(矩陣)看作一個(gè)二級指針(指向指針的指針),每一個(gè)二級指針指向一個(gè)開辟空間返回的一級指針。對比一維數(shù)組,可以看出,二維數(shù)組相當(dāng)于一維數(shù)組中存儲指向里一個(gè)一維數(shù)組的地址,通過函數(shù)將二維指針傳遞過去,可以獲取二維數(shù)組的地址,然后遍歷得到值。

3、三維數(shù)組

類比二維數(shù)組的例子,三維數(shù)組就可以看作二維數(shù)組的延申,三維數(shù)組在實(shí)際應(yīng)用中通??梢杂糜诖鎯GB圖片,理解二維數(shù)組之后,三維數(shù)組就較為簡單了,代碼例子如下。

#include
#include

int main(){
    int channels=3;
    int columns=4;
    int rows=4;
    int ***matrix=(int ***)malloc(sizeof(int **)*channels);
    for(int i=0;iint **)malloc(sizeof(int *)*rows);
    }
    for(int i=0;ifor(int j=0;jint *)malloc(sizeof(int)*columns);
        }
    }
    for(int i=0;ifor(int j=0;jfor(int k=0;kfor(int i=0;ifor(int j=0;jfor(int k=0;kprintf("%d ",matrix[i][j][k]);
            }
            printf("\\n");
        }
        printf("\\n");
    }
    return 0;
}

一個(gè)3x4x4的數(shù)組(矩陣),先開辟一個(gè)三級指針的空間,每一個(gè)三級指針指向的是一個(gè)二維數(shù)組,然后二維數(shù)組的開辟方法如同上一個(gè)例子中的那樣,一次類推,更高維度的數(shù)組也可以通過此類方法進(jìn)行套娃得到。

總結(jié)

在一些特定的程序中,我們常常無法預(yù)測數(shù)組的大小。如果我們自己將值分配給數(shù)組,那么它在執(zhí)行期間無法更改。這會產(chǎn)生問題,要么數(shù)組的內(nèi)存變低,要么數(shù)組占用更少的空間浪費(fèi)內(nèi)存,因此為避免這種情況,建議動態(tài)分配數(shù)組。

審核編輯 黃宇

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

    關(guān)注

    180

    文章

    7575

    瀏覽量

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

    關(guān)注

    1

    文章

    411

    瀏覽量

    25821
收藏 人收藏

    評論

    相關(guān)推薦

    C語言中數(shù)組和結(jié)構(gòu)體的內(nèi)存表示和布局

    C語言中,數(shù)組和結(jié)構(gòu)體都可以代表一塊內(nèi)存,但為什么結(jié)構(gòu)體可以直接賦值,而數(shù)組不可以?這個(gè)問題涉及到C語言
    發(fā)表于 08-28 10:54 ?1161次閱讀

    C語言中數(shù)組的用法

    C語言數(shù)組是一種數(shù)據(jù)結(jié)構(gòu),它可以存儲多個(gè)相同類型的數(shù)據(jù),例如整數(shù),字符,浮點(diǎn)數(shù)等。數(shù)組的每個(gè)元素都有一個(gè)索引,用來表示它在數(shù)組中的位置。
    的頭像 發(fā)表于 11-24 17:48 ?1069次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b><b class='flag-5'>數(shù)組</b>的用法

    C語言中怎么判斷數(shù)組元素的個(gè)數(shù)

    C語言中怎么判斷數(shù)組元素的個(gè)數(shù),如數(shù)組:int array[]={45,56,76,234,1,34,23,2,3};
    發(fā)表于 05-26 11:49

    如何使用單片機(jī)的C語言中數(shù)組

    如何使用單片機(jī)的C語言中數(shù)組?
    發(fā)表于 10-15 08:59

    C語言中的指針與數(shù)組分別有哪些作用呢

    C語言中的指針與數(shù)組分別有哪些作用呢?
    發(fā)表于 02-25 07:20

    C語言中怎么定義一個(gè)不定長度的數(shù)組?

    C語言中怎么定義一個(gè)不定長度的數(shù)組
    發(fā)表于 10-09 07:40

    C語言入門教程-用指針操作數(shù)組

    C語言入門教程 在C語言中數(shù)組與指針的關(guān)系十分密切。要想有效地使用數(shù)組,您需懂得如何借助指針
    發(fā)表于 07-29 12:18 ?1462次閱讀

    C語言空間開辟的教程資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語言空間開辟的教程資料說明1.系統(tǒng)自動分配內(nèi)存空間的變量 不使用關(guān)鍵字 int a; 表示a是一個(gè)整型變量
    發(fā)表于 07-29 08:00 ?1次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>空間</b><b class='flag-5'>開辟</b>的教程資料說明

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

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

    C語言中的char數(shù)組和char指針有什么區(qū)別?

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

    C語言中數(shù)組在內(nèi)存中如何表示

    C語言中數(shù)組在內(nèi)存中是怎樣表示的,今天就給大家聊聊這個(gè)話題。
    的頭像 發(fā)表于 02-15 14:35 ?813次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b><b class='flag-5'>數(shù)組</b>在內(nèi)存中如何表示

    C語言中什么是指針數(shù)組

    C語言中一個(gè)數(shù)組,若其元素均為指針類型數(shù)據(jù),稱為指針數(shù)組,也就是說,指針數(shù)組中的每一個(gè)元素都存放一個(gè)地址,相當(dāng)于一個(gè)指針變量。
    的頭像 發(fā)表于 03-10 15:26 ?1563次閱讀

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

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

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

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

    c語言中多維數(shù)組可以嵌套定義

    C語言中多維數(shù)組可以嵌套定義,這使得我們可以在一個(gè)數(shù)組中存儲另一個(gè)數(shù)組。通過這種方式,我們可以創(chuàng)建更加復(fù)雜和靈活的數(shù)據(jù)結(jié)構(gòu),以便更好地表示和
    的頭像 發(fā)表于 11-24 10:18 ?801次閱讀