a
ist ein Array von Ganzzahlen, wenn ich versuche, den Adresswert von &a[2] - &a[1] == ?
zu subtrahieren
Was sollte das Ergebnis 4 oder 1 sein?
BEARBEITEN : siehe 4. Kommentar zur obersten Antwort hier warum sagt er 1 ?? Deshalb bin ich verwirrt, ich dachte, es wird 4 sein
BEARBEITEN : Hier ist ein Test
&a[2]
ist dasselbe wie &(*(a + 2))
(d. h. (a + 2)
) und &a[1]
ist dasselbe wie &(*(a + 1))
(d. h. (a + 1)
). Also wird die Antwort 1 sein.
Pointer Subtraktion gibt Ihnen den Unterschied in Elemente , nicht Bytes. Es spielt keine Rolle, was der Elementtyp des Arrays ist, das Ergebnis von &a[2] - &a[1]
wird immer 1 sein, da sie 1 Element voneinander entfernt sind.
Es ist immer 1. Die Zeigerarithmetik beschäftigt sich nicht mit der Anzahl der Bytes, die jedes Element hat, und das ist sehr nützlich. Vergleichen Sie diese:
%Vor%Wenn Sie mit Arrays arbeiten, sind Sie normalerweise an den -Elementen interessiert, nicht an den Bytes , die sie enthalten. Deshalb wurde die Zeigerarithmetik in C auf diese Weise definiert .
Da dies C ++ ist, gehe ich davon aus, dass Sie die Operatoren &
oder *
nicht überschrieben haben, unabhängig vom Typ a
. Das stimmt, das folgende ist wahr:
Ein paar der Antworten hier (gelöscht, seit diese Antwort gepostet wurde) hatten offensichtlich Byte * im Sinn:
%Vor%Ausgabe ist:
%Vor%Zwei Adressen, aber abhängig von der Deklaration der Variablen, in der die Adressen gespeichert sind, kann der Unterschied zwischen den beiden 1 oder 4 sein.
Tags und Links arrays c++ memory-address