Динамические массивы в С++

Динамическое выделение памяти необходимо для эффективного использования памяти компьютера. Например, мы написали какую-то программку, которая обрабатывает массив. При написании данной программы необходимо было объявить массив, то есть задать ему фиксированный размер (к примеру, от 0 до 100 элементов). Тогда данная программа будет не универсальной, ведь может обрабатывать массив размером не более 100 элементов. А если нам понадобятся всего 20 элементов, но в памяти выделится место под 100 элементов, ведь объявление массива было статическим, а такое использование памяти крайне не эффективно. Динамические масссивы решают эту проблему.

Cоздают динамические массивы с помощью операции new, при этом необходимо указать тип и размерность.
int n = 100: 
float *р = new float [n];
Комментарий. Создана переменная-указатель на float, в динамической памяти отводится непрерывная область, достаточная для размещения 100 элементов вещественного типа, и адрес ее начала записывается в указатель р.

Важно. Динамические массивы нельзя при создании инициализировать, и они не обнуляются.

Преимущество. Размерность может быть переменной, то есть объем памяти, выделяемой под массив, определяется на этапе выполнения программы.

Доступ к элементам динамического массива так же, как к статическим:
р[5] или *(р+5)
Еще способ создания динамического массива с помощью функции mallос библиотеки С (не рекомендуется):
int n = 100; 
float *q = (float *) malloc(n * sizeof(float));
Операция преобразования типа, записанная перед обращением к функции mal1ос, требуется потому, что функция возвращает значение указателя тина void*, а ини­циализируется указатель на float.

Важно. Память, зарезервированная под динамический массив с помощью new [], должна освобождаться оператором delete [], а память, выделенная функцией mallос — посредством функции free, например:
delete [ ] р; free (q);
Замечание. При несоответствии способов выделения и освобождения памяти результат не определен. Размерность массива в операции delete не указывается, но квадратные скобки обязательны.
Онлайн всего: 1
Гостей: 1
Пользователей: 0

STUDLAB Сообщить про опечатку на сайте