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]將無法指向一個固定的記憶體地址
解釋: