Для обозначений начальных массивов, используемых в выражениях с редкими исключениями, они преобразуются в указатели на свои первые элементы.
Таким образом, в этом объявлении
int * ptr = arr
создается локальная переменная ptr
который будет указывать на первый элемент массива arr
.
Это выражение
arr + arrSize
указывает на один последний элемент массива arr
.
Таким образом, в пределах l oop из-за приращений указателя ptr
все элементы массива последовательно доступны, пока указатель ptr
не будет указывать на один за последним элементом массива.
Здесь является демонстрационной программой.
#include <iostream>
int main()
{
const size_t arrSize = 5;
int arr[arrSize] = { 1, 2, 3, 4, 5 };
size_t i = 0;
for ( int *ptr = arr; ptr != arr + arrSize; ptr++ )
{
std::cout << "ptr = " << ptr << ", &arr[" << i << "] = " << &arr[i] << '\n';
std::cout << "*ptr = " << *ptr << ", arr[" << i << "] = " << arr[i] << '\n';
std::cout << '\n';
i++;
}
return 0;
}
Ее вывод может выглядеть следующим образом:
ptr = 0x7ffeb74dbd00, &arr[0] = 0x7ffeb74dbd00
*ptr = 1, arr[0] = 1
ptr = 0x7ffeb74dbd04, &arr[1] = 0x7ffeb74dbd04
*ptr = 2, arr[1] = 2
ptr = 0x7ffeb74dbd08, &arr[2] = 0x7ffeb74dbd08
*ptr = 3, arr[2] = 3
ptr = 0x7ffeb74dbd0c, &arr[3] = 0x7ffeb74dbd0c
*ptr = 4, arr[3] = 4
ptr = 0x7ffeb74dbd10, &arr[4] = 0x7ffeb74dbd10
*ptr = 5, arr[4] = 5
Обратите внимание, что в этом выражении
arr + arrSize
используется так: вызываемая арифметика c. Например,
( arr + arrSize ) - arr
дает количество элементов arrSize
между двумя выражениями указателя arr + arrSize
и arr
.