Учебное пособие Самара 2015 + 004. 43 Ббк 32. 973 Н 19
Download 1.98 Mb.
|
Lekcii AiSD 2015
Операции с адресами
Указатели могут использоваться в выражениях. Если у — указатель на целое значение, т.е. имело место объявление int *у; то *у может, как уже было рассмотрено в §2.4. 1, появляться там же, где и любая другая переменная, не являющаяся указателем. Вполне допустимы выражения: *у = 7 ; // Запись числа 7 по адресу у *х *= 5 i // УВеличение значения по адресу х в 5 раз ( * z ) ++ ; // Увеличение на 1 значения по адресу z Скобки в последнем выражении необходимы, т.к. операции * и ++ имеют одинаковый приоритет и выполняются справа на- лево. Если * z = 5, то после операции (* z)++ * z 6, а * z++ толь- ко увеличит сам адрес, хранящийся в указателе z . int *р; // Указатель на тип int int i = 33; р &і; *р = *р + 1; // i - 34; Указатели можно использовать как операнды в арифметиче- ских операциях: Унарная операция ++ увеличивает его значение, теперь оно является адресом следующего элемента. Указатели и целые числа можно складывать. Конструкция вида у + п задает адрес п—го объекта, адресуемого указателем у. Это спра— ведливо для объектов любых стандартных типов ( che г, iпё и т.д.), транслятор будет масштабировать приращение адреса в со- ответствии с типом, определённым из соответствующего объяв- ления. Арифметические операции, выполняемые над указателем и целым значением, имеют осмысленный результат, если указа— тель адресует непрерывный блок памяти, хранящий множество элементов одного типа. 36
Поскольку операции ++, ——, * и & имеют одинаковый при- оритет и выполняются справа налево, то нужно внимательно от- носиться к последовательности их выполнения при их сочетани- ях, например, выражение вычисляется как сначала *, затем ++ и значение указателя увели- чивается на 1. Рассмотрим пример. Пусть имеются некоторые пе- ременные и указатель, над которым последовательно выполняют- ся операции. int i1=10, i2=20, i3=30; int *p=&i2;
*&i2 -> 20 *&++i2 -> 21 30 231 10 *р -> 21 *р++ -> 21 ’Р -* 10 30 21 130 30 21 131 *--р -> 21 Download 1.98 Mb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling