二維陣列動態分配記憶體

2021-05-27 13:57:04 字數 1028 閱讀 2777

在robert sedgewick所著的algorithm in c中,把二維陣列當成陣列的陣列為它動態分配記憶體。

首先,分配乙個指標的陣列,然後為每一行分配記憶體。

函式定義:

void **malloc2d(int r, int c, int size)

void free2d(void **arr, int r)

這種方法好處是可以用a[i][j]的方式來訪問陣列元素,但是它需要分配額外記憶體來儲存行指標。

另外,這種方法分配的記憶體是不連續的,而且在分配和釋放二維陣列時,要多次呼叫malloc和free操作,增加了系統開銷。而使用以下兩種方法為二維陣列分配的記憶體是連續的,可以避免因頻繁分配和釋放記憶體而帶來的記憶體開銷。

方法一:

用一維陣列來實現二維陣列的功能,在記憶體中二維陣列還是線性排列的。對於想申請a[m][n]陣列可以如下實現:

int 

*ptr_array;

ptr_array 

=  (int*) malloc(m*n*sizeof(int));

當需要訪問a[i][j]時, 

用如下方式訪問: 

*(ptr_array 

+  i 

*  n 

+  j);

當需要釋放空間時,用如下方式訪問:

free ptr_array;

這種方式實際上是把二維陣列用一維陣列表示,  再模擬成二維陣列使用.

方法二:

void **malloc2d(int row, int col, int size)

return arr;

}void free2d(void **arr)

這種方法的好處和不足之處同robert sedgewick的方法一樣,可以用a[i][j]的方式來訪問,但仍然需要額外分配記憶體來儲存行指標。但它分配的空間是連續的,可以避免因頻繁分配和釋放記憶體而帶來的記憶體開銷,這一點又可與方法一媲美。

最值得推薦的方法是方法二。

二維陣列動態分配記憶體

對二維陣列分配動態空間 1.已知二維陣列的行 第一維 include include 已知陣列的行數 列數由終端輸入 int main void int i,j,num int a 3 已知陣列有3行 printf 請輸入二位陣列的列數 n scanf d num 列數由終端輸入 for i 0 i...

二維陣列動態分配記憶體

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 ...

動態分配二維陣列

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 ...