Здесь мы вспомним такие понятия, как "указатели" и "адреса".
Указатель - это переменная, содержащая адрес другой переменной, т.е. значением переменной типа указатель является целое число, равное адресу того объекта, на который ссылается указатель.
Указатель существенно связан с типом объекта, на который он ссылается. Если в описании перед обозначением объекта поставить символ "*", то оно будет описывать указатель на объект того же типа и класса памяти, которые соответствуют данному обозначению без звездочки.
Указатели и целые не являются взаимозаменяемыми объектами. Константа - единственное исключение из этого правила: ее можно присвоить указателю и указатель можно сравнить с нулевой константой. Чтобы показать, что это специальное значение для указателя, вместо числа 0, как правило, записывают NULL - константу, определенную, в том числе, в файле stdio.h.
Унарная операция "*", называемая операцией косвенной адресации, рассматривает свой операнд как адрес объекта и обращается по этому адресу, возвращая его содержимое.
Унарная операция "&", называемая операцией нахождения адреса, будучи примененной к переменной, возвращает ее адрес.
Например, рассмотрим последовательность операторов:
int x,y,*px; // Описание целочисленных переменных x,y и // указателя на целое значение px. px = &x; // Значением переменной px станет адрес переменной x. y = *px; // Переменная y приобретает значение "того", // на что указывает px, т.е. значение переменной x.
Таким образом, два оператора присваивания в примере эквивалентны одному оператору y=x;, и *px может появляться в любом выражении, в котором может встретиться х, например, продолжим рассмотрение предыдущего примера:
*px = 0; // Переменная х получает значение 0. y = *px + 1; // Переменная y получает значение на 1 большее // значения х. *px += 1; // Увеличение содержимого x на единицу. *px++; // Увеличение содержимого x на единицу, при // этом постфиксная операция ++ не изменяет px, // пока объект по адресу px не будет получен. *++px; // Префиксная операция ++(--) увеличивает *--px; // (уменьшает) px до получения значения x. py = px; // Копирование содержимого указателя px в ука- // затель py в результате чего py указывает на // то же, что и px.
На следующем шаге мы рассмотрим операции, которые можно выполнять над
указателями.