Zeigerübergabe
-
Hi,
ich steh grad auf dem Schlauch:
Ich hab eine Funktion, der ich einen leeren Zeiger übergebe. Diese Funktion erzeugt mit new ein Objekt und lässt den Zeiger darauf verweisen. Wenn ich aber aus der Fkt. zurückkehre, dann ist mein Zeiger komischerweise wieder leer.Beispiel:
void makeInt(int* i) { i = new int; *i = 123; std::cout << "Make Int: " << *i << std::endl; } int main() { int* i = NULL; makeInt(i); assert(i); // i == NULL std::cout << "Integer: " << *i << std::endl; std::cin.get(); return 0; }Wird der Zeiger per "Value" übergeben?
Gibt es eine Alternative außer int makeInt()*?Grüße,
don_basto.
-
Du mußt deine Variable als Referenz übergeben, damit sich die Änderung auf's Hauptprogramm auswirkt:
void makeInt(int*& i) { ... }
-
Danke.

Grüße,
don_basto.
-
Es geht auch ohne Referenz:
void makeInt(int** i) { *i = new int; **i = 123; std::cout << "Make Int: " << **i << std::endl; } int main() { int* i = NULL; makeInt(&i); assert(i); // i == NULL std::cout << "Integer: " << *i << std::endl; std::cin.get(); return 0; } [cpp]
-
Täusche ich mich oder existieren Referenzen sowieso nur aus Faulheit?
-
Hallo
Das dient natürlich auch der Optik.
chrische
-
Badestrand schrieb:
Täusche ich mich oder existieren Referenzen sowieso nur aus Faulheit?
Anstelle von falschem Umgang mit Zeigern sind sie Goldwert.
-
Badestrand schrieb:
Täusche ich mich oder existieren Referenzen sowieso nur aus Faulheit?
Ja du täuschst dich. Hast du schonmal einen Operator überladen oder einen Kopierkonstruktor geschrieben?