Verständnisfragen zu Zeigern



  • Hallo,
    wir haben vor einigen Tagen in der Vorlesung Queues und Stacks behandelt. Während der Dozent Ersteres noch demonstriert hat, wurden Stacks nur in der Theorie angesprochen und ich habe nun mal versucht, das selbst zu realisieren.

    Das Ganze funktioniert auch, ich merke jedoch, dass ich einige Verständnisprobleme beim Thema Zeiger habe und ich oftmals einige Varianten durchprobieren musste, bis es dann "zufällig" geklappt hat.

    Dazu mal folgender Codeabschnitt, der einen neuen Knoten mit dem int-Wert data auf den Stack legen soll:

    void push(Stack *s,int data)
    {
        Knoten *k = (Knoten*) malloc (sizeof(Knoten));
        k->data = data;
    
        k->next = s->start;
        s->start = k;
    
    }
    

    Zeile 3: Ich reserviere einen Speichertbereich, der der Größe der Struktur Knoten entspricht und lege die Adresse in der Zeigervariablen k ab. Richtig?

    Zeile 4: Was genau macht nun der Operator -> ? Ich möchte ja auf die an der Speicheradresse k gespeicherten Daten zugreifen bzw. diese ändern. Warum kann ich dann nicht auch
    *k.next = NULL;
    schreiben?

    Danke 😉



  • aveya schrieb:

    Das Ganze funktioniert auch, ich merke jedoch, dass ich einige Verständnisprobleme beim Thema Zeiger habe und ich oftmals einige Varianten durchprobieren musste, bis es dann "zufällig" geklappt hat.

    Im Magazin gibt's zum Thema Zeiger auch einen Artikel 🙂

    Zeile 3: Ich reserviere einen Speichertbereich, der der Größe der Struktur Knoten entspricht und lege die Adresse in der Zeigervariablen k ab. Richtig?

    Ja. Aber der Cast ist in C unnötig.

    Zeile 4: Was genau macht nun der Operator -> ?

    Wenn du s->next schreibst, ist das eine Abkürzung für (*s).next.

    Ich möchte ja auf die an der Speicheradresse k gespeicherten Daten zugreifen bzw. diese ändern. Warum kann ich dann nicht auch
    *k.next = NULL;
    schreiben?

    Frage: Was macht das Sternchen hier? Auf was genau bezieht es sich? Wenn du die Antwort weißt, erledigt sich auch deine Frage 😉


Anmelden zum Antworten