Указатели.
Указатель - это переменная, значение которой равно значению адреса памяти, по которому лежит значение некоторой другой переменной.
В этом смысле имя этой другой переменной отсылает к её значению прямо, а указатель - косвенно. Ссылка на значение посредством указателя называется косвенной адресацией.
Указатели должны объявляться перед использованием.
тип *pointer; // читается "pointer является указателем на значение типа…".
Например:
int *ptr; // ptr-указатель на целое.
Можно объявить:
void *pt;
Но прежде чем его использовать, нужно ему присвоить указатель на какой-то конкретный тип данных.
Например:
pt=ptr;
Указатели должны инициализироваться либо при своём объявлении, либо с помощью операции присваивания. Указатель может получить в качестве начального значения 0, NULL или адрес.
Указатель со значением 0 или NULL ни на что не указывает. NULL - символическая константа, определённая специально для цели показать, что данный указатель ни на что не указывает.
Например:
int *ptr=NULL;
Для присваивания указателю адреса некоторой переменной используется операция адресации &, которая возвращает адрес своего операнда.
Например, пусть:
int y=5;
int *y Ptr,x;
Тогда,
y Ptr=&y // адрес y присвоен yPtr
Для того, чтобы получить значение, на которое указывает указатель, используется операция * (операция разыменования или операция косвенной адресации). Она возвращает значение объекта на который указывает её операнд (т.е. указатель).
x= *y Ptr; // в x будет 5
!!! Операцию разыменования нельзя применять к указателю на void, т.к. для него неизвестно, какой объём памяти надо разыменовывать.
Массивы и указатели в С++ тесно связаны и могут быть использованы почти эквивалентно.
Имя массива можно понимать как константный указатель на первый элемент массива. Его отличие от обычного указателя только в том, что его нельзя модифицировать.
Пусть
int b [ ] = {1,2,3,4,5}, *Pt;
Можно
Pt=b; // или, что то же самое Pt=& b[0];
<<<назад