Операции над указателями (косвенная адресация)
Указатель может использоваться в выражениях вида
p # ie, ##p, p##, p# = ie,
где: p - указатель, ie - целочисленное выражение, # - символ операции '+' или '-'.
Значением таких выражений является увеличенное или уменьшенное значение указателя на величину ie*sizeof(*p). Следует помнить, что операции с указателями выполняются в единицах памяти того типа объекта, на который ссылается этот указатель.
Текущее значение указателя всегда ссылается на позицию некоторого объекта в памяти с учетом правил выравнивания для соответствующего типа данных. Таким образом, значение p#ie указывает на объект того же типа, расположенный в памяти со смещением на ie позиций.
При сравнении указателей могут использоваться отношения любого вида (">", ">=", "<", "<=", "==", "!="). Наиболее важными видами проверок являются отношения равенства или неравенства.
Отношения порядка имеют смысл только для указателей на последовательно размещенные объекты (элементы одного массива).
Разность двух указателей дает число объектов адресуемого ими типа в соответствующем диапазоне адресов. Очевидно, что уменьшаемый и вычитаемый указатель также должны соответствовать одному массиву, иначе результат операции не имеет практической ценности.
Любой указатель можно сравнивать со значением NULL, которое означает недействительный адрес. Значение NULL можно присваивать указателю как признак пустого указателя. NULL заменяется препроцессором на выражение (void *)0.
Ссылка
Ссылка - это не тип данных, а константный указатель, т.е. это объект, который указывает на положение другой переменной.
Ссылка - это константный указатель, который отличается от переменного указателя тем, что для ссылки не требуется специальной операции разименования. Над указателями возможны арифметические операции. Над ссылкой арифметические операции запрещены, т.к. ссылка декларируется следующим образом:
type &ID = инициализатор;
Инициализатор - это идентификатор объекта, на который в дальнейшем будет указывать ссылка. Пример:
int a = 8;
int &r = a;
Ссылка получила псевдоним объекта указанного в качестве инициализатора. В данном примере, одинаковыми будут следующие действия:
a++;
r++;
12. Массивы
Дата добавления: 2015-09-11; просмотров: 607;