Zeiger auf Zeiger



  • Servus,

    kann mir jemand die Codezeilen von Binärbäumen genauer erklären?
    Ein paar Zeilen kann ich mir auch erklären.

    void baum::insert1(class baumknoten **w, int *datap) // Die Methode insert1 von Klasse baum bekommt die Übergabe **w und *datap
    // Wobei **w  die Adresse des Zeigers *w enthält oder ? 
    {
    	assert(w != NULL);    	// Falls wurzel == gleich Null ist dann    Fehlermeldung an die Konsole -> Baum ist leer
    	// Aber wieso w und nicht w*
    	if (*w == NULL) {       
    		*w = new baumknoten(datap); // Speicher wird re
    	} else {
    		if (*datap < (*w)->number) {
    			insert1(&(*w)->left, datap); // könnte ich auch **w->left schreiben ? 
    		} else {
    			insert1(&(*w)->right, datap); //
    		}
    	}
    }
    


  • // Aber wieso w und nicht w*
    if (*w == NULL) {

    Na. w hast du oben schon geprüft und jetzt wird geschaut, ob ein gültiger Zeiger dahinter ist. Wenn nicht, wird einer angelegt.

    insert1(&(*w)->left, datap); // könnte ich auch **w->left schreiben ?

    Nein. Wenn überhaupt **w.left.

    void baum::insert1(class baumknoten **w, int *datap)

    Wobei mir das class hier sehr suspekt vorkommt.



  • [quote="drakon"]

    void baum::insert1(class baumknoten **w, int *datap)

    Wobei mir das class hier sehr suspekt vorkommt.

    Warum? Ist syntaktisch erlaubt und ist eine Forward Declaration, nur eben nicht in einer extra Zeile

    class Baumknoten;
    

    Allerdings dürfte sich das Ganze überhaupt nicht compilieren lassen, da der namentlich bekannt gemachte Typ schon konkret benutzt wird, obwohl der Typ-Aufbau noch nicht bekannt ist...



  • [quote="Aquae"]

    drakon schrieb:

    void baum::insert1(class baumknoten **w, int *datap)

    Wobei mir das class hier sehr suspekt vorkommt.

    Warum? Ist syntaktisch erlaubt und ist eine Forward Declaration, nur eben nicht in einer extra Zeile

    class Baumknoten;
    

    Allerdings dürfte sich das Ganze überhaupt nicht compilieren lassen, da der namentlich bekannt gemachte Typ schon konkret benutzt wird, obwohl der Typ-Aufbau noch nicht bekannt ist...

    Ich glaube deswegen auch, dass hier keine forward-deklaration gemeint ist, sondern die "alte C-Syntax"...

    Gruß,

    Simon2.



  • Achso, du meinst das mitschleifen von "struct XYZ variablename"... hihi "alter C-Style" aber mit "class"...


Anmelden zum Antworten