000
10.04.2005, 15:36 Uhr
~poiz
Gast
|
Hallo zusammen!
Ich hatte kürzlich eine Vorlesung über structs und pointer. Als erste "kleine" Übung sollte ich ein Programm verstehen und erweitern. Leider verstehe ich noch immer fast nichts ;-)
Vielleicht könnte mir jemand von Euch die Zeilen zu den Pointern mit einem kurzen, verständlichen Kommentar ergänzen...(meine kommentierte Version weiter unten):
C++: |
// Praktikum 5 // Aufgabe: Dynamische Liste // 05-APR-2005
#include using namespace std;
const int BUFSIZE = 20; // size of input buffer const int NAMESIZE = 20; // max size of person's name
struct Person { Person* next; char name[NAMESIZE]; unsigned int age; };
Person anchor = { &anchor, "", 0 }; Person* p;
int main () {
while (1) { p = new (Person);
cout << "Name (leave empty to exit): "; cin.getline(p->name, BUFSIZE); if (!p->name[0]) { delete p; break; }
cout << "Age: "; cin >> p->age; cin.ignore();
p->next = anchor.next; anchor.next = p;
cout << "\nCurrently in list:\n"; cout << "==================\n";
p = anchor.next; while (p != &anchor) { cout << "Name : " << p->name << endl; cout << "Age: " << p->age << endl; p = p->next; }
cout << "==================\n";
}
cout << "Bye" << endl; return 0; }
|
***************************************************** ***************************************************** *****************************************************
C++: |
// Praktikum 5 // Aufgabe: Dynamische Liste // 05-APR-2005
#include #include using namespace std;
const int BUFSIZE = 20; // size of input buffer const int NAMESIZE = 20; // max size of person's name
//zusammengesetzer Datentyp Person struct Person { Person* next; //enthält einen Poiner auf next char name[NAMESIZE]; //char Array für Namen unsigned int age; //Alter };
Person anchor = { &anchor, "", 0 }; //anchor = Anker vom Typ Person mit Zuweisung. Der Pointer next zeigt auf sich selbst bzw. anchor Person* p; //Zeiger vom Typ Person
int main () {
while (1) { //Endlosschleife - Virus :-) p = new (Person); //Speicher in der Grösse eines Typ Person wird alloziert und Pointer p zeigt darauf
cout << "Name (leave empty to exit): "; cin.getline(p->name, BUFSIZE); //-> Operator dereferenziert Pointer p und wählt Feld name aus. p zeigt auf name[0] (char array). USer-Input wird in char array name geschrieben if (!p->name[0]) { //im ersten Element des char-array name kein Zeichen steht (O bzw. kein Zeichen wird auf True gesetzt, wurde ein ZEichen eigegeben wird auf 0 bzw. false gesetzt delete p; //wird Speicher wieder freigegeben (p zeigt jetzt auf NULL) break; //Programm beenden }
cout << "Age: "; cin >> p->age; //alter wird in int Feld age der Struktur Person geschrieben cin.ignore(); //werden Zeichen eingegben, so werden diese ignoriert (discard characters)
p->next = anchor.next; /*Pointer p (vom Typ struct) wird dereferenziert und das Feld next (ist ein Pointer) ausgewählt Dem Pointer next unseres neues Person Datentypes (siehe Zeile 22) wird die Adresse (Pointer zu Pointer Zuweisung) des ersten Datensatzes(anchor Zeile 21) zugewiesen */
anchor.next = p; //Der ursprüngliche anchor.next Zeiger, zeigt jetzt auf den neu erstellen Datensatz
cout << "\nCurrently in list:\n"; cout << "==================\n";
p = anchor.next; //Pointer p soll auf sich selbst zeigen bzw. den eingegebenen Datensatz //Pointer p adressiert jetzt nicht mehr den allozierten Adressraum, sondern sich selbst, den eingegebenen Datensatz while (p != &anchor) { //Jetzt verstehe ich gar nichts mehr :-( cout << "Name : " << p->name << endl; cout << "Age: " << p->age << endl; p = p->next; }
cout << "==================\n";
}
cout << "Bye" << endl; return 0; }
|
|