Listen
-
Ich habe folgenden Codeabschnitt gefunden.
Mich stören daran zwei Sachen.1)Direkt am Anfang wird ein Zeiger l deklariert.
Dieser zeigt auf ein Element vom Typ ListElement und ändert digit und next.
Das Problom ist l zeigt ja gar nicht auf ein konkretes Objekt.- Warum wird am Ende l=lh gesetzt?
Ist das nicht totaler Unsinn?
struct ListElement { int digit; ListElement *next; }; ListElement *l= new ListElement; l->digit = 5; l->next = NULL; ListElement*lh = new ListElement; lh->digit = 3; lh->next = l; l = lh;
- Warum wird am Ende l=lh gesetzt?
-
Das Problom ist l zeigt ja gar nicht auf ein konkretes Objekt.
Doch. Auf das mit
newerstellte Objekt auf dem Freispeicher.Warum wird am Ende l=lh gesetzt?
Wie wäre es mit mehr Kontext? Hast du den Code einfach irgendwo rauskopiert?
-
zu 1) natürlich zeigt l auf eine Instanz, nämlich auf die mit "new" erzeugte.
zu 2) warum sollte das totaler Unsinn sein? da lh->next = l gesetzt wird, ist ein Ring mit zwei Elementen entstanden. Warum genau anschließend l=lh gesetzt wird, ist nicht erkennbar, da es die letzte Anweisung ist.
edit: damn, arcoth war schneller...
-
Alles ok, die Liste wird nur komisch verwendet.
l soll immer auf den Listenanfang zeigen, darum wird l=lh geschrieben.So geht das:
//SEHR untypische Liste für C++. Uraltes Lehrbuch. //Man strickt normalerweise eine Klasse Liste drum für eine //nettere Schnittstelle. struct ListElement { int digit; ListElement *next; }; //Leere Liste anlegen ListElement *l=NULL; {//4 einfügen ListElement*lh = new ListElement; lh->digit = 4; lh->next = l; l = lh; } {//7 einfügen ListElement*lh = new ListElement; lh->digit = 7; lh->next = l; l = lh; } {//1 einfügen ListElement*lh = new ListElement; lh->digit = 1; lh->next = l; l = lh; } {//1 einfügen ListElement*lh = new ListElement; lh->digit = 1; lh->next = l; l = lh; } //Mal schauen, was vorne in der Liste steckt. cout << l->digit <<'\n';//zwigt 1 an //Alles rausholen und anzeigen! //Zeigt 1 1 7 4 an. while(l!=NULL){ cout << l->digit <<'\n'; ListeElement* toDie=l; l=l->next; delete toDie; }
-
Stimmt - eine SEHR untypische Liste, im Grunde gar keine C++-Like-Liste
und wenn man nur einen kleinen Kontruktor hinzufügen würde, vereinfacht sich das ganze schon deutlich://SEHR untypische Liste für C++. Uraltes Lehrbuch. //Man strickt normalerweise eine Klasse Liste drum für eine //nettere Schnittstelle. struct ListElement { ListElement( int d, ListElement* n ) : digit( d ) , next( n ) {} int digit; ListElement *next; }; //Leere Liste anlegen ListElement *l=NULL; l = new ListElement( 4, l ); //4 einfügen l = new ListElement( 7, l ); //7 einfügen l = new ListElement( 1, l ); //1 einfügen l = new ListElement(1, l ); //1 einfügen //Mal schauen, was vorne in der Liste steckt. cout << l->digit <<'\n';//zeigt 1 an //Alles rausholen und anzeigen! //Zeigt 1 1 7 4 an. while(l!=NULL){ cout << l->digit <<'\n'; ListeElement* toDie=l; l=l->next; delete toDie; }sucht man in Google nach "struct ListElement C++" - so findet man schon auf der ersten Seite Hinweise auf den Verlag Galileo Computing

Gruß
Werner