Задача проста: организовать хранение двумерного массива. Во время написания некоторой программы один из моих учеников использовал два разных способа представления двумерного массива в памяти, оба из них не были эффективными, хотя вопрос хранения данных на стеке и в куче уже нами обсуждался. Другой студент, когда я попросил прокомментировать разные способы выделения памяти, испытал затруднения. Получается, что всё бывает не так очевидно, как кажется. А представить визуально и сказать с использованием точных терминов то, что описывается в коде, и вовсе оказывается сложной задачей.
Пусть необходимо хранить следующий массив элементов типа int размерностью \(5\times 10\).
\(35\ 58\ 73\ 32\ 35\ 32\ 59\ 95\ 19\ 39\\ 64\ 54\ 45\ 73\ 52\ 20\ 92\ 76\ 94\ 92\\ 47\ 93\ 65\ 14\ 25\ 92\ 27\ 93\ 14\ 94\\ 90\ 45\ 85\ 31\ 69\ 32\ 95\ 12\ 87\ 53\\ 75\ 11\ 47\ 72\ 33\ 42\ 58\ 62\ 57\ 85\)
Самый адекватный вариант в большинстве случаев — выделить в куче один массив для всех элементов.
const int w = 10, h = 5;
int* array_of_a_healthy_man = new int[h * w];