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