русс | укр

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

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

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

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


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

Операторы распределения памяти new и delete


Дата добавления: 2013-12-23; просмотров: 861; Нарушение авторских прав


Арифметические операции над адресами

++ - Инкрементация.Увеличить указатель на 1. После увеличения указатель будет указывать на следующий элемент массива. Т.Е. адрес увеличится на размер элемента типа.

Пример вывода элементов одномерного массива с использованием операции инкрементации

#include <iostream>

using namespace std ;

int main ( )

{

int array [ ] = { 10, 20, 30, 40, 50 } ;

int size = sizeof ( array ) / sizeof ( array [ 0 ] ) ;

// вывод с использованием константного адреса массива

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

cout << * ( array + i ) << '\t' ;

cout << endl ;

// вывод с использованием указателя

int* p = array ;

int count = 0 ;

do

{

cout << * p++ << '\t' ;

count++ ;

} while ( count < size ) ;

cout << endl ;

return 0 ;

}

. Пример вывода строки с использованием указателя

#include <iostream>

using namespace std ;

int main ( )

{

char s [ 20 ] ;

char* p = s ;

cout << "-> " ; cin >> p ;

cout << "\nWizard - pointer!\n\n" ;

while ( * p )

cout << p++ << endl ;

p = s ;

cout << "\nInitial string -> " << p << endl ;

return 0 ;

}

 

-- - Декрементция.Уменьшение значения указателя на размер базового типа.

+- Сложение.Увеличить указатель на целое значение или на величину другого однотипного указателя.

+=- Сложение с замещением.Увеличить существующий указатель на целое значение.

-- Вычитание. Уменьшить указатель на целое значение или на величину другого однотипного указателя.

-=-Вычитание с замещением.Уменьшить указатель на целое значение или на величину другого однотипного указателя.

==,!=,>,<,>=,<=- Отношения.

new - Выделение памяти.Выделяется свободная память в соответствии с базовым типом. Адрес этой памяти передается указателю того же типа.



Delete Освобождение памяти. По адресу указателя освобождается ОП и значение указателя обнуляется.

 

Пример использования оператора new и delete

#include <iostream>

using namespace std ;

int main ( )

{

int x = 25 ;

cout << "Value x\t" << x ;

// объявление указателя с инициализацией

int* py = new int ( x ) ;

cout << "\nValue *py before delete\t" << * py ;

// освобождение памяти

delete py ;

// состояние памяти после освобождения

cout << "\nValue *py after delete\t" << * py << endl ;

return 0 ;}

Для экономичного управления оперативной памятью существует динамическая стратегия управления – это когда за один сеанс работы программы по ходу выполнения неоднократно выделяется, обрабатывается и если в этом есть необходимость, освобождается оперативная память базового типа.

Формат выделения памяти:

 

Тип * указатель = new тип; //1 формат

Тип * указатель = new тип (значение); //2 формат

 

Оператор newвыделяет блок памяти базового типа и возвращает указателю адрес на нулевую ячейку этого блока. Если newне в состоянии найти необходимое пространство свободной памяти, то возвращает адрес NULL (никакой), что определяется значением 0. Тип указателя и тип выделяемой памяти обязательно должны совпадать по базовому типу. Когда, используется второй формат одновременно с выделением необходимой памяти производится инициализация содержимого блока памяти указанным в круглых скобках значением.

Пример использования оператора new

#include <iostream>

using namespace std ;

int main ( )

{

// объявление указателей

int* pi ; unsigned short* pu ;

// выделение памяти

pi = new int ;

pu = new unsigned short ( 200 ) ;

// объявление указателя с выделением памяти

double* pd = new double ;

// объявление указателя с инициализацией

float* pf = new float ( -3.15 ) ;

// вывод адресов, выделенных new

cout << "Pointers" ;

cout << "\npi\t" << pi << "\npu\t" << pu ;

cout << "\npd\t" << pd << "\npf\t" << pf ;

// вывод значений

cout << "\n\nValues with initialization" ;

cout << "\n* pu\t" << * pu ;

cout << "\n* pf\t" << * pf ;

cout << "\n\nValues without initialization" ;

cout << "\n* pi\t" << * pi ;

cout << "\n* pd\t" << * pd << endl ;

// присваивание значений и вывод

* pi = - * pu ; * pd = - * pf ;

cout << "\n\nValues after initialization" ;

cout << "\n* pi\t" << * pi ;

cout << "\n* pd\t" << * pd << endl ;

return 0 ;

}

Чтобы освободить блок динамической памяти, выделенный оператором new,необходимо выполнить операцию динамического освобождения памяти delete.

Формат оператора динамического освобождения памяти:



<== предыдущая лекция | следующая лекция ==>
Порядок выполнения операций над указателями | Указатели и спецификатор const


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


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

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

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


 


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

 
 

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

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