Marathonlauf
-
Ich verstehe nicht wieso die Lösung zustande kommt. Und ist first->name bzw.first->zeit ein Befehl ?
Und wieso die while Schleife?Beim Marathon der Olympischen Spiele sollen sämtliche Teilnehmer in einer verketteten Liste gespeichert werden. Dieser liegen Elemente mit folgendem Aufbau zugrunde:
struct L { string name; // Name des Läufers float zeit; // Benötigte Zeit für die 42.195km L* next; // Zeiger auf nächsten Läufer };Lösung:
void Liste(L* first) { while (first != NULL) { cout << first->name << " " << first->zeit << endl; first = first->next; } }
-
Es wurde dir ja schon gesagt, dass man mit Videotutorials C++ nicht lernen kann.
-
ZetaGamma schrieb:
Und ist first->name bzw.first->zeit ein Befehl ?
Nein. name und zeit sind Member der struct L. name ist ein string, zeit vom Typ float.
Diese kannst du auslesen und beschreiben.
first ist ein Zeiger auf eine struxt L. Daher kommt hier der -> Operator zum Einsatz.ZetaGamma schrieb:
Und wieso die while Schleife?Damit du alle Läufer bekommst.
In jeder struct steht eine Verweis auf den nächsten Läufer in der Liste.
Der letzte Läufer hat einen Verweis auf NULL.Du bekommst einen Zeige rauf eine struct. Wenn dieser gültig ist (!= NULL), wird der Name und die Zeit ausgegeben. Dann wird der Zeiger auf den nächsten Läufer geholt und die Schleife geht wieder von vorne los.
-
ZetaGamma schrieb:
Ich verstehe nicht wieso die Lösung zustande kommt. Und ist first->name bzw.first->zeit ein Befehl ?
fisrt->name ist kein Befehl (statement) sondern ein Ausdruck (expression)
mfg Martin
-
Ich setzte mich gerade mit Zeiger auseinander.
Folgenden Code habe ich verstanden:
#include <iostream> using namespace std; int main(int argc, char **argv) { int i = 5, j; int *p = &i; //mit Operator & Adresse von i holen und an p zuweisen j = *p; //Derefenziere p mit Operator * und weise Ergebnis j zu cout<<j<<'\n'; //Gibt 5 aus p = &j; //p zeigt jetzt auf j *p = 215; //p dereferenzieren und 215 zuweisen cout<<j<<'\n'; //Gibt 215 aus return 0; };Kann ich nun irgendwie hier den Operator -> einsetzten ? Also ist das vlt. dasselbe wie ein anderer Operator hier im genannten Code? Denn mir wird immer noch nicht klar was -> bedeutet.
Und was heißt der Zeiger nun angewendet? z.b. a->b ?
Den Code habe ich wie gesagt verstanden, kann aber noch nichts richtiges damit anfangen, da ich bisher nur weiss das ein Zeiger auf eine Adresse zeigt und man Variablen gleichstellen kann mit Zeigern und somit indirekt auf die Variable mithilfe des Zeigers kommen kann.
-
ZetaGamma schrieb:
Kann ich nun irgendwie hier den Operator -> einsetzten ? Also ist das vlt. dasselbe wie ein anderer Operator hier im genannten Code? Denn mir wird immer noch nicht klar was -> bedeutet.
->ist für Objekte da.foo->barist äquivalent zu(*foo).bar.
-
ZetaGamma schrieb:
Ich setzte mich gerade mit Zeiger auseinander.
Kann ich nun irgendwie hier den Operator -> einsetzten ? Also ist das vlt. dasselbe wie ein anderer Operator hier im genannten Code? Denn mir wird immer noch nicht klar was -> bedeutet.
Und was heißt der Zeiger nun angewendet? z.b. a->b ?
Hi,
der Operator -> kann nur auf Zeigern auf STRUKTUREN (also class, struct oder union) verwendet werden. Genauso wie beim Operator . kann auf der rechten Seite nur der Name eines Strukturelements stehen. Der Operator -> ist eine Abkürzung für
(*StrukturZeiger).member
Jetzt alles klar?
mfg Martin
-
Danke, das hilft mir schon etwas. Ich habe mich mal bei Strukturen eingelesen und das erste verstandene Programm lautet:
#include <iostream> #include <strings.h> using namespace std; int main(void) { struct Person { //struct: Datenspeicher in selbstgewählter Form string name; int alter; }; Person peter; peter.name = "peter"; peter.alter = 32; cout << peter.name << endl << peter.alter << endl; Person michael; michael.name = "michael"; michael.alter = 55; cout << michael.name << endl << michael.alter << endl; cin.sync(); cin.get(); return 0; }Meine Frage:
Könnte ich mit diesem Programm irgendwie den Befehl Zeiger lernen? Eventuell an Anlehnung zur Aufgabenstellungen im ersten Post.
-
Schreibe eine Funktion, die die Adresse eines Objektes vom Typ Person erhält und sowohl Namen als auch Alter an cout ausgibt.
mfg Martin