- завершении программы или функции, в которой была описана переменная, память автоматически освобождается.
- 
Доступ к объявленной переменной осуществляется по ее имени. При этом все обращения к переменной меняются на адрес ячейки памяти, в которой хранится ее значение.
- 
Доступ к значению переменной можно получить иным способом – определить собственные переменные для хранения адресов памяти. Такие переменные называют указателями.
- 
Итак, указатель – это переменная, значением которой является адрес памяти, по которому храниться объект определенного типа (другая переменная).
- 
Как и любая переменная, указатель должен быть объявлен. При объявлении указателей всегда указывается тип переменной, значение которой будет храниться по данному адресу. Звездочка в описании указателя относиться непосредственно к имени, поэтому, чтобы объявить несколько указателей, ее ставят перед именем каждого из них.
- 
При работе с указателями часто используют операции получения адреса (&) и разыменования (*). Операция получения адреса (&) возвращает адрес своего операнда. Операция разыменования (*) возвращает значение переменной, хранящееся по заданному адресу, то есть выполняет действие, обратное операции получения адреса (&).
- 
C помощью указателей можно передавать адреса фактических параметров функциям и адреса функций в качестве параметров, создавать новые переменные в процессе выполнения программы, обрабатывать массивы, строки и структуры.
Понятие о ссылках 
- 
Формат описания ссылки:
- 
тип  &идентификатор_1  =  идентификатор_2;
- 
#include <iostream>
- 
using namespace std;
- 
int main(void)
- 
{ int a = 5, b = 10;
- 
int &aRef = a; // aRef является ссылкой на а
- 
aRef = b;	// а равно b
- 
aRef++;	// a++;
- 
cout << "a = " << a << endl;
- 
}

Понятие о ссылках 
- 
Ссылка на некоторую переменную может рассматриваться как указатель, который при работе с ним всегда разыменовывается. Для ссылки не требуется дополнительного пространства в памяти: она является просто другим именем или псевдонимом переменной. Для определения ссылки применяется унарный оператор &.
- 
Ссылка не создает копию объекта, а лишь является другим именем объекта. Чаще всего ссылки используются для передачи параметров в функции.
Способы передачи параметров
// Поиск максимального из двух чисел
#include <iostream>
using namespace std;
// передача параметров по значению
int max(int a, int b)
{ if (a > b) return a;
	   else return b; 
}
int main(void)
{ int m, k, i;
  cout << "i = "; cin >> i;
  cout << "k = "; cin >> k;
   m = max(i, k); // вызов функции
  cout << "max = " << m << endl;
}

Способы передачи параметров 
- 
Передача фактических параметров в функцию может происходить:
- 
При передаче в функцию фактического параметра по значению, соответствующий формальный параметр получит копию значения фактического параметра. Функция работая с копией фактического параметра не может изменить оригинальное значение фактического параметра. Это происходит потому, что копия  фактического параметра (формальный параметр) создается в стеке. В момент завершения работы функции стековое пространство, в котором находятся формальные параметры функции, очищается, уничтожая находящиеся в нем данные. При этом значение-оригинал фактического параметра оказывается недоступным для функции.
- 
В примере  фактические параметры  i и k передаются в функцию max по значению, т. е. формальный параметр a получит копию значения фактического параметра i, а формальный параметр b получит копию значения фактического параметра k.
Способы передачи параметров
// Обмен значений двух переменных
#include <iostream>
using namespace std;
 // передача параметров по адресу с использованием указателей
 void change1(int *a1, int *b1)
	{ int c = *a1;
	     *a1 = *b1; 
        *b1 = c;
   }
 int main(void)
{ int a, b;
   cout << " a : "; cin >> a; 
   cout << " b : "; cin >> b;
      change1(&a, &b);
  cout << endl << " a = " << a << endl;
  cout << " b = " << b << endl;
}

Способы передачи параметров 
- 
Если функция в процессе своей работы должна изменить значение фактического параметра, то его нужно передать по адресу,  с использованием указателя или по ссылки.
- 
Для передачи в функцию фактического параметра по адресу с использованием указателя необходимо:
- 
Оформить фактический параметр, либо как указатель ранее инициализированный, либо как обычную переменную к которой применена операция прямой адресации (&);
- 
Оформить в заголовке функции соответствующий формальный параметр как указатель;
 
- 
При передаче в функцию фактического параметра по адресу с использованием указателя соответствующий формальный параметр  получает адрес фактического параметра и в функции можно применить операцию разыменования (*) формального параметра указателя, получая таким образом доступ к значению  фактического параметра и возможность  его изменения.
- 
В примере  формальные параметры указатели a1 и b1 получат адреса фактических параметров a и b.
Способы передачи параметров
// Обмен значений двух переменных
#include <iostream>
using namespace std;
 // передача параметров по адресу с использованием ссылок
 void change2(int& a1, int& b1)
	{ int c = a1;
	      a1 = b1; 
         b1 = c;
   }
 int main(void)
{ int a, b;
   cout << " a : "; cin >> a; 
   cout << " b : "; cin >> b;
      change2(a, b);
  cout << endl << " a = " << a << endl;
  cout << " b = " << b << endl;
}

Способы передачи параметров 
- 
Для передачи в функцию фактического параметра по адресу