Основы программирования для автоматизированного проектирования и решения творческих задач - 22 стр.

UptoLike

Составители: 

Исключение составляет тип void (отсутствие значения). Указатель типа void * отличается от других
указателей отсутствием сведений о размере соответствующего ему участка памяти. При его использо-
вании обязательно необходима операция приведения типа.
П р и м е р 11
#include <stdio.h>
void main()
{
void *v;
int i = 10;
double d = 10.1;
v = &i;
printf("i = %d", *(int *) v);
v = &d;
printf("d = %g", *(double *) v);
}
Возможности связывания указателей типа void * с объектами разных типов называется "родовым
программированием". Разрешено неявное преобразование любого константного указателя к типу void *.
Поскольку с точки зрения компьютера указатель хранит такие же данные как и любая другая пере-
менная, то к ним разрешается применять операции по преобразованию информации с учетом смысла
указателя. Над указателями разрешается выполнять следующие действия:
разыменование;
преобразование типов;
присваивание;
получение адреса;
аддитивное сложение и вычитание;
инкремент и декремент;
операции отношения.
Аддитивные операции могут применяться по отношению к указателю и константе и иногда к двум
указателям.
Наиболее полно для указателей реализована операция вычитания, которая применима к указателям
на объекты одного типа или к указателю и целочисленной константе. Вычитая два указателя можно оп-
ределить "расстояние" между двумя участками памяти в единицах, кратных длине в байтах объекта того
типа, к которому отнесен указатель. Вычитая из указателя целочисленную константу k, можно перемес-
титься к другой ячейке памяти на расстояние, равное в байтах
k * sizeof(тип).
Операция сложения относительно указателей реализована в языке С беднее: можно складывать ука-
затель и целочисленную константу k. При этом происходит перемещение к ячейке памяти, отстоящей от
исходной на расстояние, равное в байтах
k * sizeof(тип).
П р и м е р 12
short i, *Pi = &i;
Pi = Pi + 2;
В этом примере произойдет смещение указателя на четыре байта.