Операции для работы с указателями

Операции над указателями

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

  • разадресация, или кос­венное обращение к объекту (*),

  • присваивание,

  • сложение с константой,

  • вычита­ние,

  • инкремент (++),

  • декремент (—),

  • сравнение,

  • приведение типов.

При работе с указателями часто используется операция получения адреса (&).

Операция разадресации или разыменования предназначена для доступа к ве­личине, адрес которой хранится в указателе. Эту операцию можно использовать как для получения, так и для изменения значения величины (если она не объяв­лена как константа):

Как видно из примера, конструкцию *имя_указателя можно использовать в левой части оператора присваивания, так как она является L-значением, то есть определяет адрес области памяти. Для простоты эту конструкцию можно считать именем переменной, на которую ссылается указатель. С ней допустимы все действия, определенные для величин соответствующего типа (если указатель инициализирован). На одну и ту же область памяти может ссылаться несколько указателей различного типа. Примененная к ним операция разадресации даст разные результаты. 

При смешивании в выражении указателей разных типов явное преобразование типов требуется для всех указателей, кроме void*. Указатель может неявно пре­образовываться в значение типа bool (например, в выражении условного опера­тора), при этом ненулевой указатель преобразуется в trueа нулевой в false.

Присваивание без явного приведения типов допускается в двух случаях:

  • указателям типа void*;

  • если тип указателей справа и слева от операции присваивания один и тот же.

Таким образом, неявное преобразование выполняется только к типу void*. Зна­чение 0 неявно преобразуется к указателю на любой тип. Присваивание указате­лей на объекты указателям на функции (и наоборот) недопустимо. Запрещено и присваивать значения указателям-константам, впрочем, как и константам любо­го типа (присваивать значения указателям на константу и переменным, на кото­рые ссылается указатель-константа, допускается).

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *