Вы можете индексировать одномерное как 2, 3 или N-мерное, если вы просто располагаете правильное количество элементов. Например, если у меня есть 10 строк и 10 столбцов, я знаю, что если я нахожусь в строке 3, мне придется пройти по крайней мере 30 элементов, чтобы добраться до него.
Почему-то я предпочитаю эту запись для простых двумерных массивов, поскольку мне не нужно беспокоиться о вложенных уровнях указателей. Недостатком является беспорядочная запись индекса. Вот пример с 2D-массивом с n строками и m столбцами:
int *matrix = new int[n*m];
//set element (3,7) to 10
matrix[3*m+7] = 10;
//print the matrix
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << matrix[i*m+j] << ' ';
}
cout << '\n';
}