Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции за I семестр.docx
Скачиваний:
5
Добавлен:
17.04.2019
Размер:
267.81 Кб
Скачать

Id_функции(список аргументов);

появляется еще два способа вызова функции:

(*переменная-указатель)(список аргументов);

или

переменная-указатель (список аргументов);

Последняя запись справедлива, так как p_f также является адресом начала функции в оперативной памяти.

Например, в теле вышеприведенной функции FunOut вызов функции по указателю может выглядеть так:

double zz=p_f('@', 3.14159);

В вышеприведенном примере тогда будет вызвана функция f1, причем C будет присвоено значение - символ @ , а D - 3.14159 .

18. Работа с динамической памятью

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

В процессе работы программы автоматически выделяется место в памяти для всех ее объектов. Как будет показано ниже, иногда требуется явно указать момент выделения памяти для некоторых объектов и размер выделяемой под них памяти.

Динамическое (т.е. осуществляемое в процессе работы программы) выделение памяти означает:

  1. поиск свободного (т.е. не занятого пока никаким объектом) участка памяти требуемого размера;

  2. объявление его занятым (чтобы никакая последующая операция выделения памяти не назначила его другому объекту);

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

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

Если в процессе работы динамически выделенная память оказывается больше не нужной, рекомендуется ее освободить, т.е. объявить доступной для других возможных операций выделения памяти. При завершении работы программы вся выделенная ей память освобождается автоматически.

Для работы с динамической памятью в С++ введены две операции:

захват памяти - new,

освобождение захваченной ранее памяти - delete.