Важно иметь четкие определения того, что означают термины. К сожалению, существует несколько определений того, что означают статические и динамические массивы.
Статические переменные - это переменные, определенные с использованием статического распределения памяти . Это общая концепция, не зависящая от C / C ++. В C / C ++ мы можем создавать статические переменные с глобальной, файловой или локальной областью видимости следующим образом:
int x[10];
static int y[10];
foo() {
static int z[10];
Автоматические переменные обычно реализуются с использованием выделения памяти на основе стека . Автоматический массив можно создать на C / C ++ следующим образом:
foo() {
int w[10];
Общим для этих массивов, x, y, z
и w
является то, что размер каждого из них фиксирован и определяется во время компиляции.
Одна из причин, по которой важно понимать различие между автоматическим массивом и статическим массивом, заключается в том, что статическое хранилище обычно реализуется в разделе данных (или разделе BSS ) объектного файла, и компилятор может использовать абсолютные адреса для доступа к массивам. что невозможно при хранении на основе стека.
Под динамическим массивом обычно подразумевается не тот, размер которого можно изменять, а тот, который реализован с использованием динамического распределения памяти с фиксированным размером, определяемым во время выполнения. В C ++ это делается с помощью new
оператора .
foo() {
int *d = new int[n];
Но можно создать автоматический массив с размером исправлений, определенным во время выполнения, используя alloca
:
foo() {
int *s = (int*)alloca(n*sizeof(int))
Для настоящего динамического массива следует использовать что-то вроде std::vector
C ++ (или массив переменной длины в C ).
Что означало задание в вопросе ОП? Я думаю, ясно , что то , что хотели , не был статичным или автоматическим массивом , но один , который используется либо динамическое распределение памяти с помощью new
оператора или массив нефиксированного размера , используя , например std::vector
.