Kleines zeiger Problem
-
Ich habe eine kleine Verständnisfrage. Dazu folgendes kleines Testprogramm:
void foo(int *i) { if(i == NULL) i = new int(88); } int main(int argc, char* argv[]) { int* p; p = 0; foo(p); cout << *p; cin.get(); return 0; }Wieso ist p nachdem ich ihm in foo etwas zugewiesen habe immer noch 0? Wie kann ich das ändern? Ich muss doch keine Referenz auf den zeiger übergeben?!?!?
Vielen Dank schon mal

-
Kurz: Weil Du den Zeiger by-value übergibst.
Lang: Such dir die Antworten aus dem Forum, die Frage wurde diese Woche schon zehnmal gestellt

-
Tolle Antwort, danke...
-
Vielleicht schreibt ja noch jemand kurz wie es richtig lauten muss, oder LordJaxom erbarmt sich einen seiner zehn Links zu posten.
-
OK, eine etwas längere Version: Du übergibst der Funktion eine KOPIE der Variable i, und die Funktion verändert diese Kopie. Um den Wert der Variablen selber ändern zu können, benötigst du eine REFERENZ.
(schau mal in deinem C++ Buch nach, was der Unterschied zwischen Kopie und Referenz ist)
-
Ganz Konkret: Das prinzip habe ich verstanden, nur ist es mir bei Zeigern noch nicht begegnet. Daher wäre es tol,wenn sich jemand die Mühe machen würde ein, zwei klitze kleineZeilen Code zu posten, die zeigen wie es richtig geht.
-
Du weißt, was eine Referenz ist? Gut
Du weißt, was ein Zeiger ist? Auch gutJetzt mußt du dir nur noch eine Referenz auf einen Zeiger anlegen.
~"void foo(int*& i)"~
-
@CStoll Super, vielen Dank. Ich habe gerade keinen Compiler zur Hand und kenne dieses Problem bei Zeigern wie gesagt bis jetzt noch nicht. Dass es einfach äquivalent funktioniert, hätte ich schlicht weg nicht gedacht.
Vielen Dank, nun bin ich aufgeklärt...
@LordJaxom ...
-
Entschuldige bitte dass ich mich zwischenzeitlich auf Deutschlands Autobahnen aufhalten durfte
sonst hätte ich den letzten Post zum Thema noch herausgesucht.
-
