русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Динамическое выделение памяти для массивов.


Дата добавления: 2015-07-09; просмотров: 1053; Нарушение авторских прав


С помощью оператора можно выделять память и для массивов. Вот как выглядит общий формат операции выделения памяти для одномерного массива : Переменная-указатель = new тип_переменной [размер];

Чтобы освободить память, выделенную для динамически созданного массива, используется такой формат оператора delete :

delete [] переменная_указатель

Следует отметить, что инициализировать динамический массив одновре6менно с выделением памяти нельзя.

 

Пример 3. Выделить память для 10 элементов массива типа double, который затем заполнить значениями от 1 до 10. Отобразить содержимое массива на экране.

Напомним, что в языке С++ имя массива – это указатель на первый элемент массива, то есть «природа» указателя и имени массива одинакова. Отсюда следует, что указатель можно индексировать, подобно массиву.

 

#include <iostream>

#define n 10

using namespace std;

void main()

{ double *p_m;

int i;

p_m = new double[n]; // выделяем память для 10-ти элементов массива

for(i=0 ; i<n ; i++) p_m[i] = 1+i; // инициализируем массив

for(i=0 ; i<n ; i++) cout<< p_m[i]<<' '; // выводим массив на экран

delete[] p_m; /* удаляем весь массив

(возвращаем память в «кучу») */

}

Следующий пример показывает, как ту же самую задачу можно решить без использования индексов. Почему следует избегать использования индексов? Дело в том, что при индексировании массива перед обращением к очередному элементу каждый раз вычисляется его адрес, путем прибавления к начальному адресу массива (имени) смещения (индекса). При использовании указателей используются операции инкремент/декремент, которые выполняются значительно быстрее, что и является решающим фактором при обработке больших объемов данных.

В примере 4 для обращения к элементам динамического массива данных используются два указателя – p_beg и p_tek. Оператор new возвращает адрес выделенной области памяти, который записывается в указатель p_beg, этот указатель служит в дальнейшем для хранения этого адреса (начало динамического массива). Для обращения к элементам массива служит «текущий» указатель p_tek.



 

Пример 4. Работа с динамическим массивом без использования индексов.

#include <iostream>

#define n 10

using namespace std;

void main()

{ double *p_beg,*p_tek;

int i;

// выделяем память для 10-ти элементов массива

p_beg = new double[10];

// устанавливаем «текущий» указатель на начало массива

p_tek=p_beg;

/* цикл для заполнения массива, «текущий» указатель перемещается на следующий элемент массива при каждом проходе цикла */

for(i=1 ; p_tek < p_beg+10 ; p_tek++)

*p_tek = i++;

/* снова устанавливаем «текущий» указатель на начало массива, так как после окончания цикла заполнения массива он указывает на конец массива */

p_tek=p_beg;

while(p_tek < p_beg+10) // цикл для отображения массива

cout << *p_tek++ << ' ';

delete[] p_beg; //возвращаем память в «кучу»

}



<== предыдущая лекция | следующая лекция ==>
Динамическое выделение памяти для отдельных переменных. | Структурный тип данных.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.316 сек.