Заполнение двумерного массива (матрицы)

Нашёл в интернете код, переделал под себя, не могу понять что означают некоторые строки, написал комментарии рядом с ними. Если не сложно, можно очень подробно разъяснить.

#include <iostream>
 
using namespace std;
 
int main() {
    setlocale(LC_ALL, "ru");
 
    int n, m;
    cout << "Введите количество элементов в столбце: ";
    cin >> n;
    cout << "Введите количество элементов в строке: ";
    cin >> m;
 
    int** mass = new int* [n]; // Понимаю что это указатель, но не понимаю почему именно 2 звёздочки, зачем тут "new"
 
    for (int i = 0; i < n; i++) {
        mass[i] = new int[m]; // И вот тут
        for (int j = 0; j < m; ++j) {
            cout << "Элемент [" << i << "][" << j << "] = ";
            cin >> mass[i][j];
        }
    }
    delete[] mass; 
    system("pause");
    return 0;
}

Двумерный массив — массив, в котором каждый элемент это массив.

Тут они как раз и создаются

Ну и раз в Си динамический массив это указатель, то массив массивов получается — указатель на указатели, int**.

То есть тут

создается массив указателей, а дальше он заполняется массивами чисел.

1 симпатия