Zeiger
-
hallo
kann mir jemand bitte erklaeren wozu man Zeiger und Referenzen braucht?
Ich kenne nur solche Beispiele und hab noch nie wirklich einen gebraucht://Zeiger: int *foo; int bar = 50; foo = &bar;und
//Referenz: int foo = 15; int &bar = foo;... aber was wuerde das eigentlich wirklich bringen?
Bei Referenzen & Zeigern kenne ich mich zwar aus, habe es aber bei meinen Konsolenprojekten noch nie verwendet, nur bei einigen Uebungen.
Das einzige was ich bei den Referenzen benutze ist folgendes:void swap(int eins, int zwei) { std::cout<<"Vorher: "<<eins<<" "<<zwei<<std::endl; int tmp = eins; eins = zwei; zwei = tmp; std::cout<<"Nachher: "<<eins<<" "<<zwei<<std::endl; }Ich bitte euch nur darum mir ein bisschen zu erklaeren wie das mit den Zeigern & Referenzen zu verstehen ist.
Mit freundlichen Gruessen - Roland
-
wenn du z.b. eine struktur beim funktionsaufruf übergeben willst kannst du nur einen zeiger darauf übergeben, dann wird nicht der inhalt kopiert.
oder um n größeres stück speicher zu alokieren
...
-
Zeiger enthalten eine Adresse, die irgendwo im Speicher liegen kann - das kann zum Beispiel nützlich sein, um größere Datenmengen verwalten zu können:
int* ptr = new int[100]; //ptr verweist jetzt auf einen Speicherblock, der Platz für 100 int-Werte aufnehmen kann //im Gegensatz zu einem Array kann die Größe auch während der Laufzeit festgelegt werdenAußerdem werden sie in C anstelle von Referenzen verwendet (siehe unten). Für ausführlichere Erklärungen empfehle ich GPC's Artikel Pointer in C(++).
Referenzen definieren eine Alias-Bezeichnung für eine bestehende Variable. Und ihr häufigster Zweck ist für Funktionen wie das angegebene swap() - um eine Möglichkeit zu haben, die übergebenen Funktionsargumente ändern zu können.
(deine Version von swap() vertauscht zwar in der Funktion die Variablen-Inhalte - aber davon bekommt das aufrufende Programm nichts mit)Außerdem kann man Referenzen und Zeiger auch verwenden, wenn man polymorphe Datentypen verwenden will (dann stimmt der Typ der Referenz nicht mehr mit dem überein, was sie referenziert) - oder wenn Objekte so groß werden, daß man sie nicht mehr kopieren kann (oder will).
-
hallo
also wenn ich zbsp.
int foo = 200; int *bar = &foo;schreibe und dann noch
*bar = 150;schreibe, was wuerde dann passieren?
wuerde foo zu 150 oder bar alleine zu 150 werden, was ich glaube,dass es nicht moeglich waere bar (ohne
einen Wert zuzuweisen.und was waere wenn ich statt dem oberen code nur
bar = 150;hinschreiben wuerde?
Mit freundlichen Gruessen - Roland
P.S.: sorry, ich bin zurzeit in einem anderem land in einem hotel und hab keinen compiler und darf nichts installieren
-
<wWw> schrieb:
hallo
also wenn ich zbsp.
int foo = 200; int *bar = &foo;schreibe und dann noch
*bar = 150;schreibe, was wuerde dann passieren?
wuerde foo zu 150 oder bar alleine zu 150 werden, was ich glaube,dass es nicht moeglich waere bar (ohne
einen Wert zuzuweisen.bar enthält die Adresse von foo - mit dem Dereferenzierungsoperator (*) greifst du auf das Objekt zu, auf das ein Pointer zeigt. Also im Endeffekt änderst du damit den Inhalt von foo.
und was waere wenn ich statt dem oberen code nur
bar = 150;hinschreiben wuerde?
Da würde dich dein Compiler höflich darauf aufmerksam machen, daß er einen int nicht an einen int* zuweisen kann

-
ok danke vielmals, CStoll

Hat echt viel geholfen!
DANKE