Указатели в C++. Общие понятия

Указатели обеспечивают хранения адресов областей памяти. При обработке компилятором переменной, например, int i=20, выделяется память в соответствии с типом (int) и инициализируется значением (20). При этом все обращения к переменной компилятор заменяет адресом области памяти, в которой хранится значение переменной. Адреса получаются автоматически. Программист сам может определить собственные переменные для хранения адресов областей памяти. Такие переменные называются указателями.

В C++ три вида указателей: указатели на объект, на функцию и указатель на void. Отличие этих указателей в свойствах и в допустимых операциях.

Указатель - не самостоятельный тип, а связан с другим конкретным типом.

Указатель на функцию - адрес в сегменте кода по которому передается управление вызова функции.

Используется для косвенного вызова функции (не через имя, а через переменную, хранящую ее адрес), и для передачи имени функции в другую функцию в качестве параметра.

Указатель функции имеет тип "указатель функции, возвращающей значение заданного типа и имеющей аргументы заданного типа":
тип (*имя) (список_типов_аргументов);
Пример:
int (*fun) (double, double);
задает указатель с именем fun на функцию, возвращающую значение типа int и имеющую два аргумента типа double.

Указатель на объект содержит адрес области памяти, в которой хранятся данные определенного типа (основного или составного).

Простейшее объявление имеет вид:
тип *имя:
где тип может любо, кроме ссылки и битового поля, причем тип может быть к этому моменту только объявлен, но еще не определен (следовательно, в структуре, например, может присутствовать указатель на структуру того же типа).

Важно. Звездочка относится к имени, требуется ставить ее перед именем каждого из них.

Пример.
int *a, b, *с;
Замечание. Можно определить указатель на указатель и т. д.

Указатель на void применяют когда конкретный тип объекта, адрес которого надо хранить, не определен (в одной и той же переменной в разные моменты времени надо хранить адреса объектов различных типов).

Указателю на void можно присвоить значение указателя любого типа, а также cравнивать его с любыми указателями, но перед выполнением каких-либо действий с областью памяти, на которую он ссылается, требуется преобразовать его к конкретному типу явно.

Указатель может быть константой или переменной, а также указывать на константу или переменную.

Примеры.
int 1; //целая переменная 
const int ci=1; //целая константа 
int *pi; //указатель на целую переменную 
const int *pci; //указатель на целую константу 
int *const ср=&i; //указатель-константа на целую переменную 
const int *const срс=&ci; //указатель-константа на целую константу
Онлайн всего: 17
Гостей: 17
Пользователей: 0

STUDLAB Сообщить про опечатку на сайте