Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Порядок работы с динамическим массивом



1. В качестве его размерности можно, как и для статического массива, объявить и использовать константу. Но эффективнее для этого взять переменную, например, unsigned n. Определяем её одним из известных способов: вводим, вычисляем, задаём случайным образом и т. п.

2.Объявляем указатель на такой одномерный массив: тип_элементов_массива *указатель; например, float *ard; Из такого объявления массива ещё не видно, будем ли мы создавать массив ard или в переменной ard будет адрес одной ячейки для вещественного числа. Это зависит от того, как будем использовать операцию new.

3. При создании динамичского массива эта операция имеет следующий синтаксис: имя_массива = new тип_элементов_массива[размерность]; Для нашего примера ard=new float[n]; Э та операция, во-первых, в динамической памяти выделяет непрерывный участок для размещения массива указанной в квадратных (а не в круглых) скобках размерности, элементы которого будут иметь указанный тип (в примере вещественный). Кроме этого, операция возвращает адрес начала массива, то есть адрес его первого элемента. После выполнения операции присваивания этот адрес будет значением переменной ard.

Третий пункт можно объединить со вторым: float *ard= new float[n]; Но в отличие от статического инициализацию динамического массива одновременно с объявлением выполнять нельзя. float *ard= new float[n]={1.1,2.2, -30.3,-44}; приведёт к ошибк е!

4. Ячейки для элементов динамического одномерного массива располагаются в оперативной памяти подряд. Поэтому работа с ним выполняется, как и для статического одномерного массива, двумя способами. Доступ к элементам динамического массива можно осуществлять с помощью явного указания индексов. Например, for (int i=0; i<n; i++) cin>>ard[i]; выполняет ввод массива.Кроме этого, динамические одномерные массивы, как и статические, можно обрабатывать, используя операции над указателями.

5. Если закончили работу с динамическим массивом, память, занятую для него, можно освободить во время выполнения программы, не дожидаясь её завершения, с помощью той же операции delete (гл. 6), синтаксис которой для динамического массива другой: delete [] имя_массива; Например, delete [] ard; освобождает всю память, выделенную для массива ard. В квадратных скобках ничего не записывается. Освободить память для части массива, указав в квадратных скобках выражение, невозможно.

Если delete “забыли” написать, то ошибки не будет. Но при работе с динамической памятью, особенно с массивами, память, выделенную с помощью new, рекомендуется всегда явно освобождать, используя delete. Дело в том, что при выходе из блока полученный с помощью new указатель уничтожается, но память остаётся распределённой, занятой, и к ней обратиться невозможно..

В отличие от статического массива адрес динамического можно менять. Но это нужно делать с осторожностью, чтобы не “потерять” адрес его начала. Этот адрес понадобится для освобождения занятой массивом памяти и, возможно, для других целей.

Из приведенных пяти этапов самым сложным и трудоёмким, но в то же время наиболее творческим является четвёртый, так как он связан с разработкой алгоритма. Остальные этапы являются почти стандартными. С другой стороны, если отлажен алгоритм в виде программы для статического одномерного массива, то этот же алгоритм можно использовать и для динамического одномерного массива, внеся небольшие почти одинаковые дополнения (см. этапы 1, 2, 3, 5).





Дата публикования: 2015-02-18; Прочитано: 198 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...