НА ЯЗЫКЕ C++
Лапшун Татьяна Степановна
Lapshun_T@itstep.org
Тема 26
ПОНЯТИЕ ССЫЛКИ. ПЕРЕДАЧА АРГУМЕНТОВ
ВНУТРЬ ФУНКЦИИ.
ПОНЯТИЕ СТЕКА И ДИНАМИЧЕСКОЙ ПАМЯТИ
Понятие ссылки
Во многих языках программирования указатель присутствует, но в
завуалированном виде в форме ссылки. Под ссылкой понимается переменная,
которая не имеет самостоятельного значения, а отображается на другую
переменную, т.е. является ее синонимом. Во всем остальном она не
отличается от обычной переменной. В отличие от явного указателя
обращение по ссылке к объекту-прототипу имеет тот же самый синтаксис,
что и обращение к объекту-прототипу.
Ссылка – неявный указатель, имеющий синтаксис указуемого
объекта (синоним). В Си имеется возможность определения такого
синонима с использованием символа &:
int a=5; // Переменная – прототип
int &b=a; // Переменная b – ссылка на переменную a
b++; // Операция над b есть операция над прототипом a
//------------------------------------------------------------------------------------------
// Формальный параметр - значение
void inc(int vv){ vv++; } // Передается значение - копия nn
void main(){ int nn=5; inc(nn); } // nn=5
//------------------------------------------------------------------------------------------
// Формальный параметр - указатель
void inc(int *pv) { (*pv)++; } // Передается указатель - адрес nn
void main(){ int nn=5; inc(&nn); } // nn=6
//------------------------------------------------------------------------------------------
// Формальный параметр - ссылка
void inc (int &vv) { vv++; } // Передается указатель - синоним nn
void main(){ int nn=5; inc(nn); } // nn=6
//------------------------------------------------------------------------------------------
Статическая память
Место в статической памяти — резервируется в момент запуска
программы и освобождается только после того, как программа завершит
свою работу.
Туда попадают глобальные переменные (объявленные вне любых
блоков, в частности, до начала метода main) и статические переменные
(перед типом которых указывается ключевое слово static, при этом
переменная может находится где угодно, в том числе и в теле какой-то
функции, но вести статическая переменная внутри функции себя будет
специфически: сохранять своё значения между повторными вызовами
функции). Разница между статической и глобальной переменной
проявляется, когда программа состоит из нескольких файлов: глобальные
переменные доступны в смежных файлах, а статические — только в том
файле, где были объявлены.
В статической памяти не рекомендуется держать длинные объекты
(например, массивы).
Динамическая память
Выделяется и освобождается — с помощью специальных инструкций
(т. е. по инициативе разработчика). Это позволяет по ходу работы программы
контролировать и корректировать объём используемой памяти и,
следовательно, создавать программы способные обрабатывать большие
объёмы данных, обходя ограниченность физической памяти машины.
Доступ к динамической памяти возможен только через указатели, т. е.
нельзя создавать в неё переменные, но можно выделять её фрагменты и
связывать с некоторым указателем.
Работа с динамической памятью