C ++: & a [2] - & a [1] ==?

7

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

    
disioe 24.05.2011, 05:33
quelle

6 Antworten

9

&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.

    
Mihran Hovsepyan 24.05.2011, 05:38
quelle
6

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.

    
fredoverflow 24.05.2011 05:38
quelle
4

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 .

    
Roland Illig 24.05.2011 05:39
quelle
3

Der Unterschied muss 1 sein. Wenn Sie Zeiger vergleichen, erhalten Sie immer die Differenz von Elementen.

    
harper 24.05.2011 05:38
quelle
2

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:

%Vor%     
Bill Lynch 24.05.2011 05:47
quelle
1

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.

    
sean e 24.05.2011 05:55
quelle

Tags und Links