Как выше уже отмечалось, массивы по своей организации в принципе являются статическими структурами данных, их размер сохраняется неизменным в течение всей работы программы или от момента создания до момента уничтожения. Термин «динамические» в данном случае относится к способу создания массивов. Такие массивы определяются при помощи указателей, а для их создания и удаления используются специальные процедуры, функции или операции динамического выделения и освобождения памяти. Такие операции могут использоваться для работы не только с динамическими массивами, но и с другими динамическими программными объектами, например, отдельными переменными.
int *p; // Указатель
p = new int; // Динамическая переменная знакового целого типа
float *b2 = new float (20.5); // Инициализация динамической переменной
int *p2;
p2 = new int [5]; // Динамический массив целых чисел из 5 элементов
Динамический массив отличается от обычного (автоматического, статического) еще и тем, что размер его может задаваться не только константой, но и переменной. При этом во время работы программы массив может уничтожаться, память, им занимаемая, будет освобождена, а затем указатель, при необходимости, может быть использован для организации массива. Имя такого массива останется тем же самым, но, фактически, это будет совершенно другой массив, возможно, другого размера и расположенный в другой области памяти.
При удалении динамического массива указание квадартных скобок обязательно (они могут быть пустыми в большинстве случаев). Иначе будет освобождена память, занимаемая только начальным элементоа этого массива, а остальная память останется занятой и к ней не будет доступа («утечка памяти»). Если указатель, используемый в операции delete, адресует не начало блока, выделенного операцией new, то последствия операции delete могут быть непредсказуемы. Если указатель содержит значение NULL, то delete не выполняет никаких действий.
int size = 40;
p2 = new int [size]; // Пересоздание нового массива с тем же именем
Динамический массив в языке Си++ имеет дескриптор, недоступный для программиста, но необходимый для правильной работы операции освобождения памяти. Именно поэтому квадратные скобки при удалении массива могут указываться пустыми.
Динамические массивы, в отличие от обычных, не могут быть инициализированы.
Массив символов может быть инициализирован строковой константой.