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-2
char* a[m];
//指標的陣列
int i;
for(i=0; ia[i] = (char *)malloc(sizeof(char) * n);
printf("%d/n", sizeof(a));
//4*m,指標陣列
printf("%d/n", sizeof(a[0]));
//4,指標
for(i=0; ifree(a[i]);
(3)已知第一維,一次分配記憶體(保證記憶體的連續性)
code-3
char* a[m];
//指標的陣列
int i;
a[0] = (char *)malloc(sizeof(char) * m * n);
for(i=1; ia[i] = a[i-1] + n;
printf("%d/n", sizeof(a));
//4*m,指標陣列
printf("%d/n", sizeof(a[0]));
//4,指標
free(a[0]);
(4)兩維都未知
code-4
char **a;
int i;
a = (char **)malloc(sizeof(char *) * m);
//分配指標陣列
for(i=0; i
printf("%d/n", sizeof(a));
//4,指標
printf("%d/n", sizeof(a[0]));
//4,指標
for(i=0; i
free(a);
(5)兩維都未知,一次分配記憶體(保證記憶體的連續性)
code-5
char **a;
int i;
a = (char **)malloc(sizeof(char *) * m);
//分配指標陣列
a[0] = (char *)malloc(sizeof(char) * m * n);
//一次性分配所有空間
for(i=1; i
printf("%d/n", sizeof(a));
//4,指標
printf("%d/n", sizeof(a[0]));
//4,指標
free(a[0]);
free(a);
2.c++動態分配二維陣列
(1)已知第二維
code-6
char (*a)[n];
//指向陣列的指標
a = new char[m][n];
printf("%d/n", sizeof(a));
//4,指標
printf("%d/n", sizeof(a[0]));
//n,一維陣列
delete a;
(2)已知第一維
code-7
char* a[m];
//指標的陣列
for(int i=0; ia[i] = new char[n];
printf("%d/n", sizeof(a));
//4*m,指標陣列
printf("%d/n", sizeof(a[0]));
//4,指標
for(i=0; idelete a[i];
(3)已知第一維,一次分配記憶體(保證記憶體的連續性)
code-8
char* a[m];
//指標的陣列
a[0] = new char[m*n];
for(int i=1; ia[i] = a[i-1] + n;
printf("%d/n", sizeof(a));
//4*m,指標陣列
printf("%d/n", sizeof(a[0]));
//4,指標
delete a[0];
(4)兩維都未知
code-9
char **a;
a = new char* [m];
//分配指標陣列
for(int i=0; i
printf("%d/n", sizeof(a));
//4,指標
printf("%d/n", sizeof(a[0]));
//4,指標
for(i=0; idelete a[i];
delete a;
(5)兩維都未知,一次分配記憶體(保證記憶體的連續性)
code-10
char **a;
a = new char* [m];
a[0] = new char[m * n];
//一次性分配所有空間
for(int i=1; i
printf("%d/n", sizeof(a));
//4,指標
printf("%d/n", sizeof(a[0]));
//4,指標
delete a[0];
delete a;
多說一句:new和delete要注意配對使用,即有多少個new就有多少個delete,這樣才可以避免記憶體洩漏!
3.靜態二維陣列作為函式引數傳遞
如果採用上述幾種方法動態分配二維陣列,那麼將對應的資料型別作為函式引數就可以了。這裡討論靜態二維陣列作為函式引數傳遞,即按照以下的呼叫方式:
int a[2][3];
func(a);
c語言中將靜態二維陣列作為引數傳遞比較麻煩,一般需要指明第二維的長度,如果不給定第二維長度,則只能先將其作為一維指標傳遞,然後利用二維陣列的線性儲存特性,在函式體內轉化為對指定元素的訪問。
首先寫好測試**,以驗證引數傳遞的正確性:
(1)給定第二維長度
code-11
void func(int a[n])
(2)不給定第二維長度
code-12
void func(int* a)
注意:使用該函式時需要將二維陣列首位址強制轉換為一維指標,即func((int*)a);
總結:(一)二維都不知——c語言
int**
p;
inti;
//申請空間 p =
(int
**)malloc(
sizeof
(int*)
*m);
for(i=0
; i<
m; i
++)
p[i] =(
int*
)malloc(
sizeof
(int)*
n);
//釋放空間
for(i=0
; i<
m; i
++)
free(p[i]);
free(p);
二維陣列的動態分配及引數傳遞
原文出自 1.c語言動態分配二維陣列 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 已知第一維 char 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 ...
二維陣列的動態分配及引數傳遞
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 ...