malloc為二維陣列動態分配記憶體

2021-10-12 01:29:07 字數 1305 閱讀 6192

首先區別一下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但這個方法每次分配指...