Указатели.

Указатель — это переменная, в которой записан адрес ячейки памяти.

Так как указатель это обычная переменная, то имена им даются такие же, иногда программисты добавляют к ним букву «р». (pNumber).

Что бы объявить указатель, запишите тип переменной на которую будет указывать указатель, затем символ *, а за ним имя указателя.

Что бы присвоить указателю адрес переменной необходимо использовать символ &.

Что бы получить результат по адресу, куда ссылается указатель (разименовать) перед именем указателя ставиться *.

int *a,b,c=0;

b=5;

a=&b;

c=(*a)+1;

*a=7;

результат:

b=7;

c=6;

ошибка:

c=*(a+1);

 

Наиболее часто указатели используются для:

§ Размещения данных в свободных областях памяти и доступа к ним.

§ Доступам к переменным и функциям классов.

§ Передачи параметров функции по ссылке и получении более, чем одного результата.

§ Работы с массивами.

Существует условное разделение памяти с которой работает программа на несколько областей:

§ Область глобальных переменных.

§ Свободная или динамически распределённая память.

§ Регистровая память.

§ Сегменты программы.

§ Стековая память.

Локальные переменные и параметры функций располагаются в стековой памяти, программный код храниться в сегментах, глобальные переменные в области глобальных переменных. Локальные переменные — это переменные которые «видит» только часть программы, глобальные — доступны из любой точки программы. Свободная память распределяется между динамическими объектами. Ячейкам динамической памяти нельзя присвоить имя (если это произойдёт, то это уже стековая память), к ним можно обратиться по адресу, к тому же адрес можно передать в любую область программы, следовательно данные, хранящиеся по этому адресу доступны везде.

Использование указателей в языке С может привести в ситуации, когда оператор изменяет адрес в указателе и таким образом значение будет потеряно. С++ предлагает альтернативу указателям, путём использования ссылок. Чтобы сделать переменную ссылкой, после типа надо поставить & .