Так как указатель содержит адрес объекта, то это дает возможность «косвенного» доступа к этому объекту через указатель.
Операция * называется операцией косвенной адресации. Она возвращает значение переменной, на которую ссылается указатель.
Например:
int x = 10; // объявление переменной целого типа и
// её инициализация значением «10»
int *p; // объявление указателя на переменную целого типа
p = &x; // присваивание указателю p адреса переменной x
*p = 5; // присваивание переменной x значения 5
*p = *p*2; // присваивание переменной x значения 10
Рис.4.3. Указатель на переменную целого типа
Оба оператора выводят значение переменной x:
1) Без использования указателя
printf(“%d”, x);
2) С использованием указателя
printf(“%d”, *p);
К указателям может применяться определенный набор арифметических операций. В качестве примера определим массив int a[10], первый элемент которого будет иметь адрес в памяти, равный 3000. Инициализируем указатель p значением адреса элемента a[0], т.е. значение p равно 3000. Этот пример изображен на рис.4.3.
int a[10];
int *p1,*p;
p = &a[0];
Рис. 4.4. Массив a[] и указатель p, ссылающийся на a