УКАЗАТЕЛИ

 

Указатель является переменной, которая содержит адрес другой переменной или функции. Описание указателя определяет тип данных, на которые ссылается указатель, оно имеет вид:

тип_указываемых данных *имя_указателя;

 

Для доступа к объекту, на который ссылается указатель, используется имя указателя со звездочкой перед ним. Эта операция называется разыменовыванием указателя, она корректно выполняется только, если указатель был предварительно инициализирован:

int i=100;// определяется целая переменная

int *point_i;// определяется указатель на целую переменную

pointi=&i; // указатель инициализируется адресом

// переменной i

printf(“%i”,*pointi); // выводится значение переменной,

// определяемое указателем. Оно равно

// значению переменной i (100).

 

Обратите внимание на операцию определения адреса (&). Она является противоположной разыменованию. Массивы и указатели тесно связаны друг с другом. Имя массива соответствует указателю на начало массива. Поэтому можно присваивать указателю адрес первого элемента массива, используя имя массива.

int array[10];

int *iptr=array;

 

С указателями можно выполнять целочисленные арифметические операции. При этом происходит вычисление адреса соответствующего элемента массива, а не адреса в памяти компьютера. Размер элемента определяется типом указателя. Для типа void соответственно никакие операции выполнять нельзя.

Указатель можно индексировать как массив. Следующие два оператора эквивалентны:

array[3]=10;

*(array+3)=10;

 

Указатели вместо массивов целесообразно использовать тогда, когда требуется последовательный доступ к элементам массива. Такая операция выполняется значительно быстрее, например:

int *ptemp=array;

for(int i=1;i<10;i++)

*(ptemp++)=0;

 

можно использовать для обнуления массива array.