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: 0057FDF8

    Es 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: 0077FDF8

    Weis 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.



  • @theAnfänger77

    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!


Log in to reply