Не используйте сырые массивы. Используйте стандартный контейнер, например std::vector
или std::array
. Оба они имеют член .size()
и допускают синтаксис на основе диапазона:
for (mystruct* p : m_arr)
Если вам нужна совместимость с C, они оба предлагают функцию-член data()
, которая возвращает указатель на первый элемент в базовом массиве. (В вашем случае это будет mystruct **
)
Редактировать: необработанный массив также поддерживает синтаксис, основанный на диапазоне - но только , если видимое объявление включает в себя количество элементов (поэтому my_struct* m_arr[2];
нормально, но my_struct* m_arr[]
не будет работать) , Невозможно объявить std::array
без определения размера.
Другие контейнеры (например, std::vector
)
не включайте размер в декларацию.