Zeigerarithmetik
-
Hey Leute habe mal eine Frage bezüglich Zeigern. Schaut euch mal bitte folgenden Quellecode an :
double d[10]; double *dp1 = d; double *dp2 = dp1 + 1; std::cout << dp2-dp1 << std::endl;
In meinem Buch wollte der Autor deutlich machen, dass ein Zeiger, wenn man ihn inkrementiert, auf den nächsten Wert zeigt. "dp2" ist ja dann quasi im Index das [1] Element. Ich verstehe soweit alles bis zu dem "cout". Die Differenz ist zwar 1 was mir deutlich macht, dass der Zeiger auf den nächsten Wert zeigt, aber trotzdem verstehe ich an dieser Stelle nicht, wie es möglich ist zwei "Adressen" voneinander zu subtrahieren, denn mit "dp2" und "dp1" greife ich ja auf die Adressen und nicht die Werte zu .. .
Wäre nett wenn mir da mal jemand auf die Sprünge helfen kann.. Lg Fabolous12
-
Fabolous12 schrieb:
Die Differenz ist zwar 1 was mir deutlich macht, dass der Zeiger auf den nächsten Wert zeigt,
Du hast es verstanden!
aber trotzdem verstehe ich an dieser Stelle nicht, wie es möglich ist zwei "Adressen" voneinander zu subtrahieren, denn mit "dp2" und "dp1" greife ich ja auf die Adressen und nicht die Werte zu .. .
Mehr steckt da aber nicht hinter.
-
Danke erstmal für die Antwort!
Aber dann müsste doch theoretisch gesehen auch dieses Verfahren funktionieren, oder?int a = 10; int b = 20; int *ptr = &a; int *ptr1 = &b; std::cout << ptr1 - ptr << std::endl;
-
In der Praxis ja, theoretisch darf man IIRC die Differenz nur bilden, wenn beide Zeiger ins gleiche Array (oder eins dahinter) zeigen.
-
"Adressen" voneinander zu subtrahieren, denn mit "dp2" und "dp1" greife ich ja auf die Adressen und nicht die Werte zu .. .