Важно иметь четкие определения того, что означают термины. К сожалению, существует несколько определений того, что означают статические и динамические массивы.
Статические переменные - это переменные, определенные с помощью статическое распределение памяти. Это общая концепция, не зависящая от 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
.
person
Z boson
schedule
20.10.2014