首先,我們一般需要用到陣列的時候,都是直接宣告,比如:
1但是,在某些情況下,陣列的維數我們是不知道的,可能是等待使用者輸入維數,這時候需要用變數來指定維數了。可是,我們不能直接這樣宣告陣列,因為c++不允許直接用變數作為維數宣告,必須用常量,像這樣就會報編譯錯誤:int array[3][3];
這時候就需要用new來動態申請陣列了。我們一步一步來,申請一維陣列的時候,我們可以這樣寫:
int num = 3這段**的意思就是,用new來申請num個int型別的空間,然後返回那段空間的首位址,再賦給array。可見array是乙個int型別的指標,指向那段空間的首位址。語法和邏輯無誤,正常執行。;int* array = new
int[num];
但是,申請二維陣列的時候,就可能要對指標這一知識點要掌握得比較好一點,理解得比較透徹。先貼**,再分析:
int num = 3;看完這段**,還是有點糊塗的。為什麼array是int**型別?為什麼還要用迴圈來分配空間?我們再來看下面注釋版的**:int** array = new
int*[num];
for(int i=0; ii)
int num = 3現在我來解釋一下,其實我們可以把二維陣列理解成為很多一維陣列的集合。比如說:int array[4][3],其實它就是由4個長度為3的一維陣列組成的。array[0]指的就是第乙個一維陣列。可以推出,array[0],array[1],array[2], array[3]就是int*型別的指標,用來分別指向一維陣列。那麼,array又是什麼呢?很顯然,array就是(int*)*型別的指標,指向剛才那4個int*指標型別占用空間的首位址。有點繞?看圖:; (
int*)* array = new
int*[num]; // 申請int*型別陣列的記憶體空間,賦值給(int*)*型別的array
for(int i=0; ii)
因此,聯絡上圖,我們先new4個int*型別,將首位址賦值給array。再用迴圈每次new4個int型別,首位址指向對應的int*型別的指標。
了解之後,我們當然要用delete釋放記憶體,就不細說了,怎麼申請怎麼釋放,並且是逆著回來釋放空間,看**:
for(int i=0; i)delete array;
二維陣列動態分配記憶體
在robert sedgewick所著的algorithm in c中,把二維陣列當成陣列的陣列為它動態分配記憶體。首先,分配乙個指標的陣列,然後為每一行分配記憶體。函式定義 void malloc2d int r,int c,int size void free2d void arr,int r ...
二維陣列動態分配記憶體
對二維陣列分配動態空間 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 ...