2ter pointer - wohin zeigt er?



  • Hallo,

    ich habe nur eine kurze Frage:
    Wohin zeigt p2? Auf das int[8] array oder auf das int[9] array?

    int* a = new int[8];
    
    int * b = new int[9];
    
    int * p2 = NULL;
    
    //...
    
    p2 = a;
    
    a = b;
    

    Falls auf das int[9] array
    wie erreiche ich, dass p2 auf das int[8] zeigt obwohl a vorher auf b umgelengt wurde?



  • Nein, also wenn ich das jetzt auf die Schnelle richtig sehe zeigt p2 auf jeden Fall auf das 8er array, da zum Zeitpunkt der Zuweisung (und nur das zählt in diesem Fall) a ja schließlich auf selbiges zeigte. Durch a = b dürfte sich der Inhalt von p2 nicht ändern.

    ph4nt0m



  • p2 zeigt auf das int[8]-Array und a zeigt auf das int[9]-Array nach den Zuweisungen. Du weist dem Pointer nur andere Adressen zu, dass wirkt sich dann nur auf den Pointer selbst aus, nicht aber auf Pointer die vorher zugewiesen wurden. Sprich durch a=b wird nicht p2 verändert, nur weil du die Adresse, auf die a gezeigt hat vorher, an p2 übergibst. Wenn du aber mehrere Zeiger auf ein Ziel hast und dann einen Wert im Array änderst, dann wäre diese Änderung bei beiden Zeigern sichtbar, da beide auf das gleiche Array im Speicher verweisen.

    Greetz



  • [Edit] zu langsam...



  • eigentlich solltest du das selber herausfinden koennen. nach den ersten 3 Zeilen siehts so aus:

    a -> int[8]
    b -> int[9]
    p2 -> Nix

    jetzt steht da p2 = a; was soviel bedeutet wie "p2 bekommt den gleichen Wert (d.h. zeigt auf das Selbe) wie jetzt im Augenblick a", also

    a -> int[8]
    b -> int[9]
    p2 -> int[8]

    was die letzte Zeile bewirkt und wie die Situation danach ist, sei dir zur Uebung ueberlassen, nur ein kleiner Hinweis: auch nach der ersten Zuweisung sind a und p2 nicht aneinander gekoppelt, man kann sie also unabhaengig voneinander aendern.



  • Danke für die schnelle Hilfe.
    Ich hatte es schon selber gemacht, kam alledings ständig durcheinander....jetzt weiß ich wenigstens dass es so schon klappen muss und mein fehler wo anders liegt - danke


Anmelden zum Antworten