二維陣列動態儲存分配

2021-07-03 19:33:28 字數 1049 閱讀 2688

為什麼要使用動態儲存分配?我想這個問題的答案可以歸結於三點:

1  在定義乙個二維陣列的時候我事先並不知曉要給他分配具體多少行多少列時

2  演算法移植到晶元的時候考慮節省記憶體時

3  子函式呼叫想要很方便的傳遞二維陣列的位址時

單就第一點而言,也許有同學會問,你自己寫程式你怎麼會不知道要給他分配多少空間?但事實就是,當你身在團隊之中,很多時候你都是只知道介面給你傳遞過來的某些引數,而這些引數的值你不知道也就不足為奇了。關於上面的1和2兩點我想是使用動態分配記憶體的最關鍵的原因,至於第三點不算是太重要,因為靜態的二維陣列也可以通過子函式去傳遞陣列的位址,只不過那個稍微有點麻煩而已。

好吧,看乙個小小的程式例項,在main函式中動態的分配了二維陣列a和b,呼叫initarray函式分別初始化a中所有元素為1,b中所有元素為2,呼叫sumarrar函式實現兩個陣列相加,相加的結果依然存放到陣列a中。

#include void initarray(int **arr, int row, int col, int x)	}}

void printarray(int **arr, int row, int col)

printf("\n"); }}

void sumarray(int **arraya, int **arrayb, int row, int col) }}

void main()

initarray(a,row,col,1);

initarray(b,row,col,2);

sumarray(a,b,row,col);

printarray(a,row,col);

}

可以看到,這個分配方式是很方便的,尤其要說的是在呼叫子函式傳遞陣列的位址時簡潔明瞭。

動態分配的記憶體如何釋放呢?但看此例,假如我們已經使用完了a和b之後,他們的空間就不需要在駐留到記憶體了,釋放起來也是非常簡單的。

for (int i = 0; i < row; i++)

delete a;

delete b;

動態分配二維陣列

1.c語言動態分配二維陣列 1 已知第二維 code 1 char a n 指向陣列的指標 a char n malloc sizeof char m printf d n sizeof a 4,指標 printf d n sizeof a 0 n,一維陣列 free a 2 已知第一維 code ...

動態分配二維陣列

原文摘自 假設我需要乙個nrows ncolumns陣列,則可以用以下幾種方法動態分配空間 1.動態陣列的成員都可以用正常的陣列下標 array i j include include void main printf n free array 2.讓陣列的內容連續,但在後來重新分配列的時候會比較困...

動態分配二維陣列

眾所周知,每乙個二維陣列有n行個二級指標指向陣列的每一行,每一行有m個一級指標指向陣列的每乙個元素。因此,我們動態分配二維陣列只要分配n個二級指標,n m個一級指標就行了,先來看乙個常用的方法 int i,p int malloc row sizeof int for i 0 i但這個方法每次分配指...