Array bestehend aus Zeigern



  • Wenn schon, dann

    Person *array[10];
    array[0] = new Person;
    //...
    delete array[0];
    
    //oder ganz dynamisch
    Person **array = new Person*[10];
    array[0] = new Person;
    delete array[0];
    delete [] array;
    

    Sieh dir die FAQ zu mehrdimensionsionalen Arrays an.

    Ich leitete mit "wenn schon" ein.
    D.h. es gibt bessere Methoden, zum Beispiel das Verwenden eines std::vector.
    Natürlich kommt es darauf an, ob die Aufgabenstellung vorgefertigte Container zulässt.



  • funktioniert dynamisch trotzdem verstehe ich net was du da genau gemacht hast!

    stack::stack(int pgroesse)
    {
        groesse = pgroesse;
        stackinhalt = new Person*[groesse];
        top = 0;
    }
    
    wobei
    
    class stack
    {
        private:
    
            Person **stackinhalt;
            int top;
            int groesse;
    
        public:
    
            stack(int pgroesse);
            void push(char *pnachname, char *pvorname, char*padresse, char *port,
                   int pplz, int ppnr);
            void pop();
            void set_groesse(int pgroesse);
            void print_stack();
            ~stack();
    
    };
    

    Ich verstehe net genau was da passiert!Genauergesagt diese 2 Sternchen bei stackinhalt wieso doppelt?



  • hmm ja was passiert denn hier genau?Wieso Zeiger auf Ziegr?Kann dies mal jemand erläutern?



  • Type** bedeutet Zeiger auf Zeiger auf Objekt vom Typ Type. Was gibt es da zu verstehen? (analog: Type*** - braucht man aber fast nie)



  • soorry aber ich bin net so unbedigt der c++ freak und mir ist klar, dass es zeiger auf zeiger heißt aber irgendwie kannst mir mal erklären wieso ich das mit dem doppelzeiger in diesem fall machen muss!



  • Das erste *, weil du new[] verwendest, obwohl die Standardbibliothek so viele bessere Container zur Verfügung stellt. Dass dynamische Arrays als * gehandhabt werden, finde ich reichlich dämlich (wie new[]/delete[] allgemein), aber du hast dich dafür entschieden 😉
    Das zweite, weil du gesagt hast, dass der Stack nur Zeiger auf die Elemente speichern soll.



  • ok und wieso kommt dann ein zeiger vor groesse?

    und wie spreche ich dann die teile an, dennn da mit kommt immer ein meory violation fehler!

    stackinhalt[i]->get_nachname()
    

    wobei get_nachname nur ein return nachname ist! 😃



  • Uninitialisierte Pointer?



  • Hallo,

    ich wuerd die 'push'-Funktion anders implementieren. Warum uebergibst du nicht
    einfach ein 'Person *' an 'push':

    void push(Person *);
    

    Ist m. E. nach einleuchtender, denn schliesslich willst du ja auch 'Personen'
    auf deinen Stack legen.

    Und 'pop()' wuerde ich eher als:

    Person *pop();
    

    implementieren, da man mit pop() das oberste Element eines Stacks zurueck-
    geliefert bekommt (und dieses dann vom Stack entfernt wird).

    mfg
    v R



  • operator void schrieb:

    ..., obwohl die Standardbibliothek so viele bessere Container zur Verfügung stellt.

    Zum Beispiel std::stack? 😉



  • davie schrieb:

    operator void schrieb:

    ..., obwohl die Standardbibliothek so viele bessere Container zur Verfügung stellt.

    Zum Beispiel std::stack? 😉

    Nein, das wär jetzt zu einfach. 😉


Anmelden zum Antworten