@seregksablin
Студент первого курса

Как выглядит в памяти динамический массив в C++?

Изучаю указатели , есть задача "Как трёхмерный динамический массив выглядит в памяти, если my_3d_array_height=2, my_3d_array_width=3, my_3d_array_depth=4?". Есть ответ на эту задачу:
spoiler
int ***AllocateLargeMemoryBlockFor3DArray (int height, int width, int depth) {
     int * large_memory_block = new int[ height * width * depth ];
     int ***my_3d_array = new int**[ height ];
     for (int row_index = 0; row_index < height; ++row_index) {
          my_3d_array [ row_index ] = new int * [ width ];
          for (int column_index = 0; column_index < width; ++column_index) {
                    my_3d_array [ row_index ][ column_index ] = &large_memory_block [ ( row_index *width + column_index ) *depth ];
}
}
return my_3d_array;
}
Не понимаю зачем каждый элемент массива ссылается на другой блок выделенной памяти large_memory_block
  • Вопрос задан
  • 175 просмотров
Решения вопроса 1
Nipheris
@Nipheris Куратор тега C++
В ответе на эту задачу видимо достигалась одна цель - дать возможность адресовать элементы массива тремя последовательными индексациями, а не одной "сложной" - [ ( row_index *width + column_index ) *depth ].

Зачем это сделано именно так - непонятно, в C++ можно предложить более элегантные варианты решения этой задачи без доп. выделений под массивы-из-указателей (ограничиваясь только large_memory_block , где и будут храниться элементы массива).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы