Основы программирования на C++, PASCAL
4.10. Указатели
Понятие указателя знакомо читателю из разд. 3.21, в котором описывается ссылочный тип данных в Паскале. Смысл этого понятия в Си/Си++ остается тем же: указатель — это адрес поля памяти, занимаемого программным объектом.
Пусть в программе определены три переменные разных типов:
int a=5;
char с='G';
float г=1.2Е8;
Эти величины разместились в памяти компьютера следующим образом:
Операция & — адрес. Применение этой операции к имени переменной дает в результате ее адрес в памяти. Для переменных из данного выше примера: &а равно FFCO, &с - FFC2, &r - FFC3.
Описание указателей. Для хранения адресов используются переменные типа «указатель». Формат описания таких переменных следующий:
тип *имя_переменной
Примеры описания указателей:
int *pti; char *ptc; float *ptf;
После такого описания переменная pti может принимать значение указателя на величину целого типа; переменная ptc предназначена для хранения указателя на величину типа char; переменная ptf — на величину типа float.
Указателям могут присваиваться значения адресов объектов только того типа, с которым они описаны. В нашем примере допустимы операторы
pti=&a; ptc=&c; ptf=&r;
В результате указатели примут следующие значения:
pti - FFCO, ptc - FFC2, ptf - FFC3.
Как и для других типов данных, значения указателей могут инициализироваться при описании. Например:
int a=5; int *pti=&a;
char c='G'; char *ptc=&c;
float r=1.2E8; float *ptf=&r;
В заголовочном файле stdio.h определена константа — нулевой указатель с именем NULL. Ее значение можно присваивать указателю. Например:
ptf=NULL;
Не надо думать, что после этого указатель ptf будет ссылаться на нулевой байт памяти. Нулевой указатель обозначает отсутствие конкретного адреса ссылки.
Использованный в описаниях указателей символ * (звездочка) в данном контексте является знаком операции разадресации. С ее помощью можно сослаться через указатель на соответствующую переменную.
После приведенных выше описаний в записи выражений этой программы взаимозаменяемыми становятся а и *pti, с и *ptc, r и *ptf. Например, два оператора
х=а+2; и x=*pti+2;
тождественны друг другу. В результате выполнения оператора
cout<<*pti<<a;
на экран выведется 55.
Операции над указателями. Записывая выражения и операторы, изменяющие значения указателей, необходимо помнить главное правило: единицей изменения значения указателя является размер соответствующего ему типа.