Array und pointer
-
Hallo miteinander, hab von der Uni ein programm zu interpretieren, nur wenn ich es kompile bekomme ich einen anderen output, als den ich mir erklären kann - glaube jedoch der compiler hat eher recht.
Kann mir jemand helfen, wieso dass ein solcher output zu stande kommt, wenn der code lautet:
#include <iostream> int main() { int a[] = {5, 6, 2, 3, 1, 4, 0}; int* p = a; do{ std::cout << *p << " "; p = a +*p; } while (p != a); return 0; }Wobei ich als output
5 4 1 6 0 bekomme,
mfg chris
-
p = a +*p;weist dem Zeiger p die Adresse vom ersten Element von zu plus den Wert, auf den p gerade zeigt.Das hier ist unser a 5 6 2 3 1 4 0 Am Anfang zeigen a und p auf das erste Element: 5 6 2 3 1 4 0 ^ Bei p = a + *p ist a der Zeiger auf das erste Element und *p ist der Wert hinter p. Da p zu dem Zeitpunkt noch auf die 5 zeigt, wird p also die Adresse von a+5 zugewiesen, was dann hierhin zeigt: 5 6 2 3 1 4 0 ^
-
Ach so geht das, war eben völlig verwirrt wegen dem *p, wusste nicht mehr genau, was das genau macht und wollte a+p rechnen und so, aber das geht ja nicht so einfach,
merci, Chris