Я собираюсь использовать термин «ранг» для обозначения «числа измерений» в вашем массиве. Таким образом, вектор имеет ранг 1, матрица имеет ранг 2 и так далее. Вы уже приняли ответ, который по вашему собственному признанию не совсем то, что вы хотите. Вот альтернатива для расчета за меньшее:
Вспомните, что компьютерная память по существу линейна и что компилятор, когда он предоставляет вам массивы, на самом деле заботится о преобразовании выражения индекса в линейный адрес. Об этом проще всего думать, если предположить, что все массивы находятся в смежной памяти, а не всегда так. Предположим, что вы делаете объявление, такое как ARRAY_OF_TYPE [10] [10] [10], т.е. оно имеет 1000 элементов. Тогда элемент в позиции [3] [5] [4] имеет вид (мои массивы индексируются с 1, а не с 0 - измените суммы, которые следуют, если хотите) в местоположении baseAddress + 354 * size_of_element_of_TYPE.
Полагаю, вы знаете, куда я сейчас иду ...
Во время выполнения ваша программа запрашивает у пользователя список целых чисел. Каждое целое число определяет размер одного из измерений массива, число целых чисел указывает ранг массива. Ваша программа делает несколько умножений, и вы выделяете вектор правильной длины. Хорошо, вы должны написать функции индексации и деиндексации, но они должны быть достаточно простыми.
и вуаля у вас есть массив, ранг которого устанавливается во время выполнения.