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

Динамические массивы. Динамическимназывается массив, размерность которого становится известной в процессе выполнения программы



Динамическим называется массив, размерность которого становится известной в процессе выполнения программы. Такие массивы делают последнюю более общей.

Формирование динамических массивов осуществляется с помощью указателей и средств распределения памяти. Память выделяется в специальной области оперативной памяти – heap, которую часто называют свободной памятью.

Для выделения памяти в С++ используется операция new, а для для ее освобождения – операция delete.

Ниже приводится общепринятый способ динамического распределения памяти под одномерный массив.

int n, *mas; // объявление указателя

.......

cin>>n; // ввод размерности массива

mas=new int[n]; // выделение памяти

..........

delete [] mas; // освобождение памяти

mas=NULL; //обнуление указателя

В данном примере переменная mas является указателем на массив из n элементов (и его именем одновременно). Ему присваивается адрес выделенной области памяти в соответствии с заданным типом объекта. Иногда объявление указателя и операцию new совмещают.

int *mas = new int[n];

Если объем любого свободного участка памяти недостаточен для размещения массива, операция new возвращает нулевой указатель (адрес 0), индицируя тем самым безуспешную попытку выделения памяти. Поэтому результат операции new обычно проверяют следующим образом:

float *mas = new float[n];

if (mas == NULL)

{ cout<<"Свободной памяти нет"<<endl;

exit (1); //аварийное завершение программы

}

Пример. Формирование и сортировка массива с n элементами (лист. 7.1).

Листинг 7.1. ukaz_1. сpp

#include <iostream.h>

#include <stdlib.h> //Для функции exit

void main()

{ int n;

double a,*mas; //mas - указатель на динамический массив

//Ввод размерности массива

cout<<"Введите размерность массива:\n";

cout<<"n=",cin>>n;

mas=new double[n]; //Выделение памяти под массив

if(mas==NULL)

{

cout<<"Свободной памяти нет"<<endl;

exit(1);

}

//Ввод массива

cout<<"Введите элементы массива:\n";

for(int i=0;i<n;i++)

{

cout<<"mas["<<i<<"]=";cin>>mas[i];

}

cout<<"\n Исходный массив чисел:\n"<<"mas["<<n<<"]={";

for(int i=0;i<n;i++)

cout<<mas[i]<<" ";

cout<<"}"<<endl;

//Сортировка массива методом "пузырька"

for(int i=0;i<n-1;i++)

for(int j=i+1;j<n;j++)

if (mas[j]<mas[i])

{a=mas[i];

mas[i]=mas[j];

mas[j]=a;

}

//Вывод отсортированного массива

cout<<"\nОтсортированный массив чисел:\n"<<"mas["<<n<<"]={";

for(int i=0;i<n;i++)

cout<<mas[i]<<" ";

cout<<"}";

delete [] mas; //Освобождение памяти

mas=NULL; //Инициализация указателя

}





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



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