首先區別一下double **a 與 double *a:
#include
#include
#include
using
namespace std;
intmain()
分析:兩段程式都是輸出名稱a,為什麼結果不一樣?其實可以模擬char * a和char a[10];
當定義成double ** a時,系統並未給其分配記憶體,a就是乙個指標的大小4,當定義為double * b[row]時,系統就會給b分配row個指標,所以b的大小為row*4=80,而每個指標例如b[0]指向double *型別
#include
#include
#include
using
namespace std;
intmain()
接下來看兩種定義方法下如何用malloc對其動態分配記憶體:
double **a 方式:
1)方法1:
#include
#include
#include
using
namespace std;
intmain()
/* 注意手動釋放空間
*/for(
int i=
0; i)free
(a);
// 此記憶體分配方法的結果是,a[i]所指向的第i行的各個位址是連續的,但是a[0],a[1],a[2],...是不連續的
}
2)方法2:
#include
#include
#include
using
namespace std;
intmain()
/* 注意手動釋放空間
*/for(
int i=
0; i)free
(a);
}
double *a[row] 方式:
#include
#include
#include
using
namespace std;
intmain()
/* 手動釋放記憶體
*/for(
int i=
0; i)free
(a);
// 上面的方法,最終的二維陣列位址同方法一,行內連續,行間不連續
}
動態分配二維陣列
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但這個方法每次分配指...