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"...