为什么在c ++中声明动态2d数组时使用指针指向指针?

问题描述

有人能解释为什么在C ++中声明动态2D数组时为什么要使用指针(**)吗?我不明白为什么要为此使用循环。

using namespace std;

int main(){

    int **matrixPtr;//2d array declaretion
    cout << "enter no of rows: ";
    int row;//defining row
    cin >> row;//initializing value of row from user
    cout << "enter no of columns : ";
    int col;//defining column
    cin >> col;//initializing value of column from users
    matrixPtr = new int *[row];//allocating 2d array dynamically
    for(int i=0;i<row;i++){
       matrixPtr[i] = new int[col];
    }
}

解决方法

大约2D矩阵只是1D矩阵,其元素是基本元素的1D矩阵,因此是数组的数组。对吧?

然后,如果您要动态分配它,则可以:

  1. 元素的类型,例如int
  2. 用于存储动态元素数组的类型,其后为int *(指向int的指针);多少,例如cols
  3. 用于存储一维数组的动态数组的类型,然后是int **,指向int的指针,多少个rows

然后,您需要在(3)处循环,因为您需要独立分配大小为cols的每个1D数组...您有rows行,大小为cols的每一行。