Einfach verkettete Liste
-
Hi, das Folgende Programm ist eine einfach verkettete Liste:
#include<iostream> #include<string> using namespace std; struct listenelement { string daten; listenelement* next; }; void anhaengen(string datenneu, listenelement* listenanfang) { listenelement* hilfszeiger; hilfszeiger = listenanfang; while (hilfszeiger->next != nullptr) hilfszeiger = hilfszeiger->next; hilfszeiger->next = new(listenelement); hilfszeiger = hilfszeiger->next; hilfszeiger->daten = datenneu; hilfszeiger->next = nullptr; } void ausgeben(listenelement *listenanfang) { listenelement* hilfszeiger; hilfszeiger = listenanfang; cout << hilfszeiger->daten << '\n'; while (hilfszeiger->next != nullptr) { hilfszeiger = hilfszeiger->next; cout << hilfszeiger->daten; cout << " Adresse: "<<&hilfszeiger<<'\n'; //ADRESSEN AUSGEBEN } } int main () { listenelement* listenanfang; listenanfang = new(listenelement); listenanfang->next = nullptr; listenanfang->daten = "Element 1"; anhaengen("Element 2", listenanfang); anhaengen("Element 3", listenanfang); anhaengen("Element 4", listenanfang); ausgeben(listenanfang); return 0; }
Ausgabe:
Element 1
Element 2 Adresse: 0057FDF8
Element 3 Adresse: 0057FDF8
Element 4 Adresse: 0057FDF8Es fällt auf, dass alle neu erzeugten Elemente die selbe Adresse haben.
Eigentlich würde ich etwas erwarten wie:Element 1
Element 2 Adresse: 0057FDF8
Element 3 Adresse: 0067FDF8
Element 4 Adresse: 0077FDF8Weis jemand warum die Adresse bei allen Elementen 0057FDF8 ist?
Ich gehe doch in der Funktion ausgebe() immer auf das nächste Element.
Dem entsprechend ist auch die Konsolenausgabe.
-
void ausgeben(listenelement *listenanfang) { listenelement* hilfszeiger; hilfszeiger = listenanfang; cout << hilfszeiger->daten << '\n'; while (hilfszeiger->next != nullptr) { hilfszeiger = hilfszeiger->next; cout << hilfszeiger->daten; cout << " Adresse: "<<&hilfszeiger<<'\n'; // Entferne hier das & Zeichen. } }
Du gibst als Adresse die Adresse der Zeigervariable zurück und nicht deren Inhalt (Zeiger auf Listenknoten).
-
Aaaah!
"hilfszeiger" ist ja bereits eine Adresse.
Vielen Dank!