Ich lese gerade einen Code und festgestellt, dass die Person arr[-2]
wurde mit dem zweiten Element zuzugreifen, bevor die arr
, etwa so:Sind negative Array-Indizes in C zulässig?
|a|b|c|d|e|f|g|
^------------ arr[0]
^---------- arr[1]
^---------------- arr[-2]
Ist das erlaubt?
Ich weiß, dass arr[x]
ist das gleiche wie *(arr + x)
. Also arr[-2]
ist *(arr - 2)
, was in Ordnung scheint. Was denken Sie?
Beachten Sie auch, dass Sie den Zeiger nicht dereferenzieren müssen, um UB zu erhalten. Lediglich die Berechnung von 'irgendein Array-2' ist undefiniert, es sei denn, das Ergebnis liegt in dem Bereich vom Start von 'irgendein Array' bis 1 nach seinem Ende. – RBerteig
In älteren Büchern wurden die '[]' als * Syntax Zucker * für Zeigerarithmetik referenziert. * Favorite * Weg, Anfänger zu verwechseln, ist '1 [arr]' - anstelle von 'arr [1]' zu schreiben - und ihnen beim Raten zuzusehen, was das bedeuten soll. – Dummy00001
Was passiert auf 64-Bit-Systemen (LP64), wenn Sie einen 32-Bit-Int-Index haben, der negativ ist? Sollte der Index vor der Adressberechnung zu einem 64-Bit-Zeichen mit Vorzeichen hochgestuft werden? –