Das folgende Programm gibt -1
, aber ich erwartete es 1
drucken:Warum bekomme ich eine negative Zahl beim Subtrahieren von Zeigern?
#include <iostream>
int main()
{
int a[] = {0, 1};
int* p = a;
int* p2 = a+1;
std::cout << p - p2 << std::endl;
system("PAUSE");
return 0;
}
Wenn ich die Subtraktion wie folgt tauschen um:
std::cout << p2 - p << std::endl;
Dann bekomme ich genau 1
.
Die Antwort auf Pointer subtraction confusion sagt, dass, wenn wir Zeiger von Zeigern subtrahieren, wir die Menge der Speicherblöcke zwischen ihnen liegenden bekommen, und ich sehe nicht, dass diese negativ sein kann.
Ich erwarte, genau das gleiche Ergebnis für p - p2
und p2 - p
zu erhalten.
Sie sollten 'p' von' p2' subtrahieren, nicht umgekehrt. -1 ist richtig für das, was Sie haben (ein Speicherblock vom ersten Block, Null-Nummer). – Resurrection
Aus Gründen des Experiments habe ich versucht, umzukehren, und ich mag die Antwort, die ich bekomme, aber wenn ich die erste mache, die mir -1 gibt, bin ich verwirrt. Was bedeutet -1? –
sagen wir eine [0] Adresse ist 0x01, a [1] ist 0x02, also p - p2 ist 1 - 2 ist -1 – Lukasz