Арифметические операции с указателями (сложение с константой, вычитание, инкремент и декремент) автоматически учитывают размер типа величин, адре суемых указателями. Эти операции применимы только к указателям одного типа
имеют смысл в основном при работе со структурами данных, последовательно размещенными в памяти, например, с массивами.
Инкремент перемещает указатель к следующему элементу массива, декремент —
предыдущему. Фактически значение указателя изменяется на величину sizeof (тип). Если указатель на определенный тип увеличивается или уменьшает ся на константу, его значение изменяется на величину этой константы, умножен ную на размер объекта данного типа, например:
Разность двух указателей — это разность их значений, деленная на размер типа в байтах (в применении к массивам разность указателей, например, на третий и шестой элементы равна 3). Суммирование двух указателей не допускается.
При записи выражений с указателями следует обращать внимание на приорите ты операций. В качестве примера рассмотрим последовательность действий, за данную в операторе
*р++ = 10;
Операции разадресации и инкремента имеют одинаковый приоритет и выполня ются справа налево, но, поскольку инкремент постфиксный, он выполняется по сле выполнения операции присваивания. Таким образом, сначала по адресу, за писанному в указателе р, будет записано значение 10, а затем указатель будет увеличен на количество байт, соответствующее его типу. То же самое можно за писать подробнее:
*р = 10: Р++;
Выражение (*р)++. напротив, инкрементирует значение, на которое ссылается указатель.
Унарная операция получения адреса & применима к величинам, имеющим имя и размещенным в оперативной памяти. Таким образом, нельзя получить адрес ска лярного выражения, неименованной константы или регистровой переменной. Примеры операции приводились выше.
Ссылки
Ссылка представляет собой синоним имени, указанного при инициализации ссылки. Ссылку можно рассматривать как указатель, который всегда разымено вывается. Формат объявления ссылки:
Достарыңызбен бөлісу: |