Указатель — это переменная, в которой записан адрес ячейки памяти.
Так как указатель это обычная переменная, то имена им даются такие же, иногда программисты добавляют к ним букву «р». (pNumber).
Что бы объявить указатель, запишите тип переменной на которую будет указывать указатель, затем символ *, а за ним имя указателя.
Что бы присвоить указателю адрес переменной необходимо использовать символ &.
Что бы получить результат по адресу, куда ссылается указатель (разименовать) перед именем указателя ставиться *.
int *a,b,c=0;
b=5;
a=&b;
c=(*a)+1;
*a=7;
результат:
b=7;
c=6;
ошибка:
c=*(a+1);
Наиболее часто указатели используются для:
§ Размещения данных в свободных областях памяти и доступа к ним.
§ Доступам к переменным и функциям классов.
§ Передачи параметров функции по ссылке и получении более, чем одного результата.
§ Работы с массивами.
Существует условное разделение памяти с которой работает программа на несколько областей:
§ Область глобальных переменных.
§ Свободная или динамически распределённая память.
§ Регистровая память.
§ Сегменты программы.
§ Стековая память.
Локальные переменные и параметры функций располагаются в стековой памяти, программный код храниться в сегментах, глобальные переменные в области глобальных переменных. Локальные переменные — это переменные которые «видит» только часть программы, глобальные — доступны из любой точки программы. Свободная память распределяется между динамическими объектами. Ячейкам динамической памяти нельзя присвоить имя (если это произойдёт, то это уже стековая память), к ним можно обратиться по адресу, к тому же адрес можно передать в любую область программы, следовательно данные, хранящиеся по этому адресу доступны везде.
Использование указателей в языке С может привести в ситуации, когда оператор изменяет адрес в указателе и таким образом значение будет потеряно. С++ предлагает альтернативу указателям, путём использования ссылок. Чтобы сделать переменную ссылкой, после типа надо поставить & .