Операции над указателями
Помимо операций доступа по адресу * и получения адреса & , над указателями определены следующие операции:
- сложение с константой,
- вычитание,
- инкремент,
- декремент,
- операции отношений.
Операция доступа по адресу* предназначена для доступа к величине, адрес которой хранится в указателе. Эту операцию можно использовать как для получения, так и для изменения значения величины (если она не объявлена как константа):
char a; // a - переменная типа char
char *ptr; // выделение памяти под указатель ptr
*ptr = ‘@’; // по адресу ptr записано значение @
a = *ptr; // переменной а присвоено значение,
// записанное по адресу ptr
Как видно из примера, конструкцию *указатель можно использовать в левой части оператора присваивания, так как она определяет адрес области памяти. Эту конструкцию можно считать именем переменной, на которую ссылается указатель. С ней допустимы все действия, определенные для величин соответствующего типа.
Арифметические операции с указателями (сложение с константой, вычитание, инкремент и декремент) автоматически учитывают размер типа величин, адресуемых указателями. Эти операции применимы только к указателям одного типа и имеют смысл в основном при работе со структурами данных, последовательно размещенными в памяти, например, с массивами.
Инкремент++ перемещает указатель к следующему элементу массива, декремент- к предыдущему. Если указатель на определенный тип увеличивается или уменьшается на константу, то его значение изменяется на величину этой константы, умноженной на размер объекта данного типа. Эта операция производится автоматически.
Разность двух указателей – это расстояние между двумя областями памяти, определяемое в единицах, кратных размеру (в байтах) объекта того типа, к которому отнесены эти указатели. Таким образом, разность указателей, адресующих два смежных объекта одинакового типа, по абсолютной величине всегда равна единице.
Внимание! Суммирование двух указателей недопустимо!
Указатели редко используются с простыми данными вроде отдельных переменных. Преимущества указателей наглядно проявляются при использовании их вместе с массивами, функциями и строками.
Дата добавления: 2015-10-19; просмотров: 853;