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