1. 程式人生 > >C++ 動態申請二維陣列與二維陣列傳參

C++ 動態申請二維陣列與二維陣列傳參

以往在C++的學習中我們知道:

int *ptr = new int; 這樣可以動態分配一個int型指標

int *ptr = new int[3]; 這樣可以動態分配一個一位陣列

但是如何動態分配一個二維陣列呢?像這樣:

int *ptr = new int[3][3] ?執行測試->顯然這種分配方式是不正確的:

在嘗試新的方法之前,我們需要首先了解二維陣列在記憶體中的儲存結構:

 理解了這幅圖的基本原理,我們就可以編寫相應的演算法來進行實現: 

****************************************************************************************************************************************

 

一:動態申請二維陣列

Step1:

首先我們呀先定義一個數組,用來存放指標

int **array = new int*[3];

☆解析(為什麼要使用二維陣列?):

首先我們new了一個數組,內部存放了三個指標,然後我們用一個指標指向該陣列的首地址:

這裡如果array是一級指標,那麼當給array[0]再次引出一條指向新記憶體的線(指標)時,就會出現錯誤,因為圖中紅色框框中的每條線對應的就是一個指標,

而當array是一級指標的時候,array[0] 表示的不再是指標,而是指標執行記憶體中的值,所以這裡使用二級指標的根本目的是為了使得能夠讓array[i]繼續指向其他記憶體空間來產生二維陣列的效果。

 

Step2:

然後我們在進一步為第一步中的每個指標再次分配空間:

for (int i = 0; i < 3; i++)
{
    array[i] = new int[3];
}

這樣就達到了第一步中圖片裡面的效果,構建了3x3的二維陣列;

 

 

二:二維陣列傳參(二維陣列作為形參)

void Func( int (*array)[3] );   

//這裡要首先指定一級指標的大小,否則array[0]指向的空間記憶體大小如果不確定,array[1]將無法指向一個固定的記憶體地址

解釋: