概述
????????多維數組,實際上就是“數組的數組”。最常見的是二維數組,就像一個表格,擁有行和列。而三維數組則可以想象為多個這樣的表格堆疊起來形成的一個立方體。依此類推,我們可以構建四維、五維甚至更高維度的數組。
????????多維數組主要用于表示具有多個屬性的數據集合。在計算機圖形學中,圖像可以被視為二維像素矩陣。在科學計算中,物理場可能需要三維數組來表示。另外,棋盤類游戲中的棋盤通常是一個固定大小的網格,實際上也是一個多維數組。比如:國際象棋的棋盤是一個8 x 8的網格,可以用二維靜態數組來表示。
聲明與初始化
????????我們以二維數組為例,來說明如何進行聲明與初始化。聲明一個多維數組,首先需要明確指定數組的類型和每個維度的尺寸。聲明格式通常如下:
????????????????type arrayName[size1][size2];
????????其中,type代表數組中元素的數據類型(比如:int、float等),而size1和size2則是在編譯期可以確定的一個常量值或常量表達式,表示數組在一維和二維分別能夠容納的元素個數。比如:要聲明一個3 x 4的二維數組,可以寫為如下代碼。
int paNumber[3][4];
????????其中,paNumber是一個包含3個元素的數組,每個元素本身又是一個包含4個整數的數組。
????????在聲明二維數組的同時,還可以對二維數組進行初始化。初始化時,可以按照維度直接給出所有元素的值,形式如下。值得注意的是,如果省略某些值,默認它們會被設置為0。
int paNumber[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}
};
????????訪問二維數組中的某個元素,可以通過兩個連續的下標運算符[]實現,其語法格式如下:
????????????????arrayName[index1][index2];
????????其中,index1和index2是從0開始計數的位置索引,index1不能大于size1,index2不能大于size2。比如:有一個名為paNumber的整型數組,想要獲取第二行第三列元素的值,可以寫作paNumber[1][2]。
動態分配
????????有時候,我們需要根據程序運行時的變量值動態創建多維數組,而不是在編譯時就確定其大小。此時,可以使用指針和new來實現。
????????在下面的示例代碼中,這段代碼首先創建了一個指向指針數組的指針ppMatrix(即二維數組),然后為每一行分配了足夠的內存空間來存儲列元素。
int nRows = 3;
int nCols = 4;
// 創建行指針數組
int** ppMatrix = new int*[nRows];
for(int i = 0; i < nRows; ++i)
{// 為每一行分配空間ppMatrix[i] = new int[nCols];
}
????????需要注意的是,動態分配內存后,我們必須釋放這些資源,以防止內存泄漏。
for(int i = 0; i < nRows; ++i)
{// 釋放每一行的內存delete[] ppMatrix[i];ppMatrix[i] = NULL;
}// 最后釋放行指針數組的內存
delete[] ppMatrix;
ppMatrix = NULL;