Es sollte etwas offensichtlicher werden, wenn man bedenkt, was die Array-Indizierung tatsächlich macht.
Bei einem Array test
greifen Sie normalerweise auf das n
Element von test
mit test[n]
zu. Dies entspricht jedoch tatsächlich *(test+n)
. Dies liegt daran, dass die Addition von Zeigern automatisch die Menge multipliziert, die Sie hinzufügen, mit der Größe des Typs, auf den verwiesen wird. Dies bedeutet, dass der Zeiger dann auf das zweite Element im Array zeigt, wenn Sie dem Zeiger ein Element hinzufügen, das dritte Element, wenn Sie zwei hinzufügen, und so weiter.
Der Code, den Sie angeben, verweist dann auf diesen Wert, sodass Sie mit enden. Die Funktionen (&
) und die Dereferenzierung (*
) löschen sich dann gegenseitig aus, was bedeutet, dass Sie nur mit test+n
enden.
Der Code führt dann einen anderen Array-Index für diesen Wert aus, sodass Sie mit (test+n)[n]
enden, der wiederum als *((test+n)+n)
geschrieben werden kann. Wenn Sie das vereinfachen, erhalten Sie *(test+n+n)
, die als *(test+2*n)
umgeschrieben werden kann.
Klar, dann, wenn Sie das zurück in Array Indizierung Notation konvertieren, Sie am Ende mit test[2*n]
, die in einfacher Form angibt, dass Sie jedes andere Element des Arrays abfragen wird.
'&' ist ein Adressoperator hier. – LogicStuff