Указатели (ООАиП ООП Объектно ориентированное мышление и программирование)

Указатели
Переменные при работе программы хранятся в оперативной памяти компьютера, а конкретно в ее ячейках. Каждая ячейка оперативной памяти имеет свой номер. Количество ячеек оперативной памяти ограничено разрядностью процессора компьютера и операционной системы. Например в 32 битные операционные системы могут работать максимум с 4 гигабайтами оперативной памяти. Каждая ячейка оперативной памяти имеет размер 1 байт и имеет индивидуальный номер.
В языке С++ указатели как раз могут хранить номер ячейки оперативно памяти. В 64 разрядной операционной системе указатель занимает 8 байт или 64 бита.
Указатель должен иметь тип данных на который он указывает. Это связано с тем, что переменные различных типов данных занимают в оперативной памяти различное количество ячеек или байт (байт и ячейка это не в коем случае не синонимы).
Для объявления указателя необходимо написать типа данных на переменную которого указатель будет указывать (хранить ее адрес), далее знак *, далее придуманное нами имя указателя. Например
int* x; //объявление указателя с именем x на переменную типа int
После объявления указателя в него можно сохранять адреса переменных указанно типа, в данном примере переменных типа int.
Номер ячейки оперативной памяти называют адресом. Для получения адреса какой либо переменной используется знак &, который необходимо поставить перед переменной адрес которой необходимо получить.
Например
x=&y; //в указатель с именем x сохраняется адрес переменной y.
Чтобы непосредственно обратить по адресу на который указывает указатель необходимо перед его именем написать знак * в тексте программы, после чего с этой конструкцией – операция разыменование, например
*x
Под разыменованием будем понимать получение содержимого ячейки памяти (переменной) адрес которой хранит указатель.
Можно работать как с обычной переменной. Например положить (присвойить) в эту ячейку значение 25.
*x=25;
Так как указатель x указывает на ячейку где хранится переменная y (смотреть пример выше), но с этого момента переменная y будет хранить не старое значение, а новое значение 25.
Как правило оперирование с указателями занимает меньше ресурсов компьютера и намного быстрее чем оперирование с переменными, поэтому указатели активно применяются в языке C++, и именно эта особенность языка C++ в числе других вывели язык C++ в лидирующие позиции по разработке приложений, в частности для практически всех компьютерных игр, как достаточно требовательных к ресурсам компьютера.
Доступ к составляющим массива возможен через указатели. Массив могут передаваться в фукнции например как адрес первого элемента массива. Строки в языке С++, тоже являются массивами переменных типа char, соттветственно и строки могут передаваться аналогичным образом.
Если функция получает укзатель на объект (экземпляр класса), а не сам объект, то это значительно ускоряет работу программы, так как отпадает необходимость создавать временные переменных для хранения полей класса, а создается только одна временная переменная, которая хранит адрес лежащий в указателе который передается в функцию.
Возможно создание и указателей на указатели; массивов указателей; списков каждый элемент которых, кроме последнего, содержат данные и указатель на следующий элемент списка.
Домашнее задание: прочитать главу 10 стр 437 и разобрать примеры.

Автор: к.п.н. Румянцев Сергей Александрович

← Назад в раздел