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


Anmelden zum Antworten