При объявлении указателя надо стремиться выполнить его инициализацию, то есть присвоение начального значения. Рассмотрим некоторые способы инициализации указателей.
Присваивание указателю адреса существующего объекта:
с помощью операции получения адреса:
int a=5; // Объявление целой переменной
int *p=&a; // В указатель записывается адрес a
с помощью значения другого инициализированного указателя:
int *r=p; или int *r; r=p;
2. Присваивание пустого значения:
float *r=NULL; или float *r=0;
Арифметические операции с указателями
С указателями могут быть использованы операции инкремента (++), декремента (--), сложения (+), вычитания (-); операции сравнения, присваивания. Если к указателю применяются операции ++ или --, то указатель увеличивается или уменьшается на размер объекта, на который он указывает, что условно можно представить так:
тип *ptr;
ptr++ = содержимое_ptr+sizeof(тип)
ptr-- = содержимое_ptr-sizeof(тип)
где типом может быть любой основной тип языка C++ или тип введенный пользователем.
Операции сложения или вычитания можно применять к указателю, если вторым операндом будет целое число. Целое число складывается с указателем или вычитается из него следующим образом:
|
|
тип *ptr;
int n;
ptr+n=содержимое_ptr+n*sizeof(тип)
ptr-n =содержимое_ptr-n*sizeof(тип)
Один указатель можно вычитать из другого, если они оба указывают на один и тот же объект. Если, например, два указателя ссылаются на разные элементы массива, вычитание одного указателя из другого позволяет получить количество элементов массива, находящихся между двумя заданными. К указателям можно применять только описанные операции. Следующие операции недопустимы с указателями:
сложение двух указателей;
вычитание двух указателей на различные объекты;
сложение указателей с числом с плавающей точкой;
вычитание из указателей числа с плавающей точкой;
умножение и деление указателей.
Присваивание указателей
Можно присваивать один указатель другому. Однако эта операция имеет смысл только в том случае, если оба указателя являются указателями на объекты одного и того же типа.
Пример присваивания указателей.
#include <stdio.h>
int main()
{
int j =12525, *p1, *p2;
p1=&j;
p2=p1; // Присваивание указателей
printf(“%d\n”, *p1); // Оба оператора напечатают одно и то же
printf(“%d\n”, *p2);
return 0;
}