Все идентификаторы массивов на самом деле являются указателями, и все указатели могут адресовать массивы. Звучит странно? Чтобы разобраться, рассмотрим природу массива. Массив объединяет «под одной крышей» набор переменных одного типа. Если идентификатор collection означает массив, то выражение collection[0] — его первый элемент. В известном смысле выражение collection[0] является аналогией разыменованного указателя.
Дело в том, что идентификатор collection в действительности является указателем-константой. Он указывает на первый элемент массива и не может быть переадресован. В остальном он ничем не отличается от обычных указателей. Таким образом, выражение *collection обозначает то же самое, что и collection[0] — значение первого элемента массива.
Добавление единицы к указателю увеличивает его значение на величину того типа данного, которое он адресует. Если массив collection имеет тип int, то прибавление к нему единицы (collection + 1) увеличивает получаемое значение на 2 (т.к. размер типа int — 2 байта). Если бы массив имел значение long, то значение увеличилось бы на 4 и т.д. В любом случае выражение (collection + 1) является адресом второго элемента массива. Получаются следующие равенства:
*(collection + 1) == collection[1] /* то же значение */
collection + 1 == &collection[1] /* тот же адрес */
Не перепутайте *(collection +1) и Collection + 1. Последняя запись эквивалентна записи *collection) + 1.
*(collection + 1) /* значение второго элемента массива */
*collection +1 /* 1 добавляется к 1-ому элементу */
Стандарт С описывает систему обозначений массива в терминах указателей, т.е. выражение collection[n] при компиляции программы переводится в *(collection + n). Квадратные скобки — лишь для удобства программистов.
Выражение * (collection + n) можно понимать следующим образом: «Перейти к ячейке памяти с обозначением collection, переместиться на n единиц и осуществить здесь выборку значения».
Хотя обычно все эти подробности, касающиеся адресации массивов, оставляют компилятору, иногда бывает полезно взять на себя эту работу и использовать вместо индексов массивов указатели в явном виде.
много полезного почерпнул на сайте, и особенно в этой статье
Поднятая тема актуальна и познавательна, спасибо автору.