Ответ Нет, вы не можете в C ++ .
Размеры массива должны быть известны во время компиляции.
int my_array[6][7]; // okay
int my_array[H][7]; // ISO C++ forbids variable length array
int my_array[6][W]; // ISO C++ forbids variable length array
int my_array[H][W]; // ISO C++ forbids variable length array
Некоторые компиляторы поддерживают Variable Length Arrays
(VLA) через собственное расширение, но VLA не определены в стандарте C ++, поэтому использование VLA не будет соответствовать стандарту C ++.
VLA были введены в стандарте C99 C. C ++ был разветвлен от стандарта C C98. К тому времени, когда C представил VLA, в C ++ уже были Векторы, и ему не нужно было поддерживать или поощрять VLA. Следовательно, VLA никогда не был официально принят в стандарте C ++, некоторые компиляторы C ++ все еще поддерживают VLA через расширения компилятора.
С тех пор вы пометили свой Q C, а также C ++, чтобы суммировать ответ:
In C99 & versions after that : You Can
Versions before C99: You Can't
In C++(Any version): You can(through compiler extensions) but You should'nt
Вот легендарный C ++ FAQ , который объясняет все о массивах.
Я многому научился от этого. :)