ОСВОБОЖДЕНИЕ ПАМЯТИ

При компиляции программы память компьютера разбивается на четыре области, содержащие код программы, глобальные данные, стек и динамически распределяемую память ( иногда ее называют heap – куча). Heap – это свободная память, с которой можно работать с помощью функций new и delete. Для new аргументом является выражение, определяющее размер выделяемого массива, а возвращаемое значение – это указатель на начало массива:

int *array=new int[10];

 

Если память не может быть выделена, то оператор new возвращает указатель NULL . После каждой операции выделения памяти обязательна проверка указателя на NULL:

if(array==NULL)

printf(“memory allocation error.”);

else

{

// действия при правильном выделении памяти

}

 

Выделенная динамически память автоматически не освобождается при выходе из блока или по завершению программы. Для ее освобождения обязательно необходимо выполнить команду delete[] имя_массива; (delete[] array; − для предыдущего случая).

 

ПРОТОТИПЫ ФУНКЦИЙ

 

Прежде, чем какая-либо функция будет использоваться в программе, она должна быть описана или определена. Описание (прототип функции) информирует компилятор о существовании функции, о типе параметров и типе возвращаемого значения. Оно имеет вид:

<возвращаемый тип> ИмяФункции ( параметры);

 

В конце списка параметров стоит знак “точка с запятой”, это и указывает на то, что мы имеем дело не с описанием функции, а с ее прототипом. Функции, которые не используют параметров, обычно описываются прототипом с ключевым словом void на месте списка параметров.

 

ВЫЗОВ ПО ЗНАЧЕНИЮ И ВЫЗОВ ПО ССЫЛКЕ

 

При вызове функции фактические имена параметров заменяют формальные имена, которые использовались при описании функции. Следовательно, совсем не обязательно использовать одинаковые имена при вызове и при описании. Аргументы в функцию обычно передаются по значению, т.е. в функцию передается только копия текущего значения. Сама переменная в этом случае внутри функции не может быть изменена. Главным ограничением вызова по значению является то, что функция может возвращать только одно значение.

При вызове по ссылке в функцию передается адрес аргумента. В этом случае копирование аргумента не выполняется, что позволяет экономить память и время выполнения. Переменная, переданная по ссылке, может быть изменена внутри функции. Это позволяет создавать функции, которые возвращают более одного параметра. Для указания того, что передача параметра выполняется по ссылке, используется знак &, который ставится перед именем параметра. Если в функции не предполагается изменение этого параметра, то целесообразно перед типом параметра поставить ключевое слово const:

int add(const int &x, const int &y)

{

int z;

z=x+y;

return z;

}