在C++中,定義數組時,數組的維數必須是常量表達式,定義多維數組也是這個要求。如果需要定義一個由用戶輸入維度的多維數組時,就必須使用動態分配內存的方式進行定義。
1 二維數組
以二維數組爲例,在《C++二維數組》中提到,二維數組的元素又是數組,例如
int a[2][3] = {
{1, 2, 3}
,{4, 5, 6}
};
可以將a看成一個數組,這個數組中有2個元素,每個元素又是一個包含3個int的數組。
2 指針的指針
可以通過定義指針的指針實現動態分配二維數組的內存空間。“指針的指針”與二維數組的關係如圖1所示。
圖1 指針的指針
int** a = new int*[m];
for (int i = 0; i < m; i++)
{
a[i] = new int[n];
}
其中,m是用戶輸入的二維數組的行數,n是列數。
在程序結束前,需要手動釋放二維數組的內存。
for (i = 0; i < m; ++i)
{
delete[] arr[i];
}
delete[] arr;
其中,for循環中delete釋放的是整型1-6所在的內存,最後的delete釋放的是a1和a2所在的內存。