hansbatt Geschrieben 20. August 2001 Geschrieben 20. August 2001 Hallo, kann mir bitte jemand behilflich sein ? habe folgendes problem. habe folgende datenstruktur: struct datensatz { char name[15]; char v_name[15]; char strasse[15]; int hausnr; int gebdat; char telnr[15]; }; HP: void main() { datensatz dat1; eingabe(dat1); cout<<dat1.name; //z.B. } UP: datensatz eingabe(datensatz dat1) { cout<<"\nName: "; cin>>dat1.name; cout<<"\nVorname: "; cin>>dat1.v_name; cout<<"\nStrasse: "; cin>>dat1.strasse; cout<<"\nHausnummer: "; cin>>dat1.hausnr; cout<<"\nGeburtsdatum: "; cin>>dat1.gebdat; cout<<"\nTelefonnummer: "; cin>>dat1.telnr; } Nun, wie kann ich die Daten vom UP nun ans HP übergeben ? Sollte das eigentlich mit Pointer/Zeigern machen. Habe jedoch leider noch nicht so den Plan von dem ganzen. Wo finde ich gute Beispiele zu dem Thema ? plz help ! :confused: Zitieren
Hasi Geschrieben 20. August 2001 Geschrieben 20. August 2001 hier ist ein ganz gutes Tutorial schau einfach mal nach aber ich denke da sind sicher Zeiger erklaert http://www.c-plusplus.de/tuts/cpp/vcppk.zip Zitieren
hansbatt Geschrieben 20. August 2001 Autor Geschrieben 20. August 2001 hmh, da hab ich schon geschaut, hat mir jedoch nicht so ganz weitergeholfen ! Zitieren
schnitzel21m Geschrieben 20. August 2001 Geschrieben 20. August 2001 ich würde zuerst ma das unterprogramm vor das hauptprogramm klattschen un dann würde ich nicht 2* dat1 verwenden...das objekt in der klammer würde ich dann peter nennen...auf jeden fall net dat1! hast du schon mal versucht mit einem rückgabewert zu schaffen...das heißt, dass du deine funktion eingabe in void eingabe taufst und zum schluß dann return dat1 oder so zurückgigst...kann aber auch ziemlich falsch sein! un ab! Schnitzel ist ziemlich verschärft! Zitieren
schnitzel21m Geschrieben 20. August 2001 Geschrieben 20. August 2001 ...hab gerade nochma überlegt: das mit dem rückgabe mußt du hier nicht machen Zitieren
Crush Geschrieben 20. August 2001 Geschrieben 20. August 2001 Schreib einfach void main() { datensatz dat1; eingabe(&dat1); cout<<dat1.name; //z.B. } UP: bool eingabe(datensatz& dat1) und gib zum Schluß ein "return true;" zurück, wenn alles glattging. Das ist nämlich im Grunde genommen dasselbe als wie wenn Du einen Pointer verwenden würdest. Bei Deinem Alten UP wird eine Kopie von dat1 übergeben. Diese Kopie existiert nur innerhalb vom Namensbereich von UP. Nach dem Return wäre alles deshalb weg. Durch die Referenzierung wird die Adresse auf die Daten vom dat1 im Main() weitergegeben. Jede Veränderung auf diese Referenz verändert das dat1 von Main(). Außerdem kann das anlegen von Kopien die Laufzeit extrem verlängern, beziehungsweise bei rekursiven Funktionen kann plötzlich einfach der Stack überlaufen wenn er nicht groß genug ist. Ist vielleicht gut zu wissen, aber jetzt schau Dir unbedingt mal Referenzen und Pointer genauer an, denn ohne die kann man nicht viel anstellen. Zum Schluß noch kurz die Pointer-Version: void main() { datensatz dat1; datensatz*p_dat1=&dat1; eingabe(p_dat1); oder eingabe(&dat1); dann ist der p_dat1 aber überflüssig cout<<dat1.name; //z.B. } UP: bool eingabe(datensatz* dat1) { cout<<"\nName: "; cin>>dat1->name; cout<<"\nVorname: "; cin>>dat1->v_name; usw. <FONT COLOR="#a62a2a" SIZE="1">[ 21. August 2001 00:00: Beitrag 1 mal editiert, zuletzt von Crush ]</font> Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.