int *p; |
Описание вида type *x сообщает транслятору, что когда *x появляется в выражениях, то это значение типа type. Переменная x - ссылка на переменные типа type и принимает в качестве значения адреса переменных типа type. type - базовый тип для x. В этой задаче переменная p описана как ссылка на целое, т.е. базовый тип для p - int. |
for ( p=&a[0]; |
&a[0] дает адрес a[0]. |
p<=&a[4]; |
Элементы массива хранятся в памяти в порядке возрастания индексов, т.е. a[0] предшествует a[1], которое предшествует a[2], и т.д. Так что p, инициируемое значением &a[0], меньше, чем &a[4]. |
PR(d, *p); |
Выражение *p дает целое, хранящееся по адресу, содержащемуся в p. Поскольку p содержит &a[0], то *p есть a[0]. |
p++ |
Если к ссылке применить операцию увеличения, то она будет указывать на следующий элемент базового типа. Фактически же значение ссылки увеличивается на sizeof(базовый тип). В языке не предполагается проверка того, что получившийся в результате адрес действительно есть адрес доступного элемента базового типа. В этой задаче p будет указывать на следующий элемент массива a. |
p<=&a[4]; |
Значение p проверяется на конец массива a. Цикл заканчивается, когда p будет указывать на последний элемент массива. В теле цикла p последовательно указывает на элементы массива в порядке возрастания индексов. |