Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Zeiger Innerhalb von Strukturen | Arbeiten mit Zeigern und Strukturen
C-Strukturen

Zeiger Innerhalb von Strukturen

Swipe um das Menü anzuzeigen

Wesentliche Datenstrukturen wie Stacks, verkettete Listen und Bäume können Verweise auf andere Objekte desselben Typs enthalten, um Verbindungen oder Beziehungen zwischen Elementen herzustellen. Datenstrukturen werden später in diesem Kurs behandelt.

Note
Hinweis

Elemente solcher Datenstrukturen werden üblicherweise als Knoten bezeichnet.

Datenstrukturen

Wenn Sie versuchen, eine Struktur zu erstellen, die ein Feld desselben Typs wie die Struktur selbst enthält, erhalten Sie einen Fehler:

struct Node {
    int data;
    struct Node next; // error: `Node` structure contains itself
};

In diesem Fall tritt eine unendliche Rekursion auf, wenn die Größe einer solchen Struktur bestimmt wird.

Dieses Konzept kann mit einem Zeiger auf eine Struktur umgesetzt werden:

struct Node {
    int data;
    struct Node *next; // pointer to the `Node` structure
};

Dieser Code funktioniert, weil der Compiler die genaue Größe eines Zeigers kennt — normalerweise 4 oder 8 Byte, abhängig vom System.
Er versucht nicht, die Größe der gesamten verschachtelten Struktur zu berechnen; er speichert lediglich eine Referenz (address) darauf.

Schauen wir uns an, wie das in der Praxis funktioniert.

main.c

main.c

1234567891011121314151617181920212223242526
#include <stdio.h> struct Node { char name[20]; struct Node* next; }; int main() { struct Node Kate = { "Kate" }; struct Node Tom = { "Tom" }; struct Node Bob = { "Bob" }; Kate.next = &Tom; // Kate --> Tom Tom.next = &Bob; // Tom --> Bob // set a pointer to the first structure in the chain struct Node* pointer = &Kate; while (pointer != NULL) { printf("Address: %p | Name: %s-> | Next address: %p\n", pointer, pointer->name, pointer->next); pointer = pointer->next; // go to the next object } return 0; }

struct Node kate = { "Kate" }; – das Feld next wurde im Struktinitialisierer nicht explizit initialisiert und wird daher automatisch auf einen Nullzeiger (NULL) gesetzt, da dies der Standardwert für Zeiger ist, wenn sie auf kein Objekt zeigen.

while (pointer != NULL) – die Schleife läuft, bis der Zeiger auf die NULL-Adresse zeigt.

Note
Hinweis

In Programmiersprachen wie C und C++ bedeutet ein Zeiger, der NULL ist, in der Regel das Ende einer Liste (oder einer anderen Datenstruktur). Daher wird diese Schleife ausgeführt, bis pointer NULL ist, was als Erreichen des Endes der Liste oder Datenstruktur interpretiert werden kann.

question mark

Warum können wir keine Struktur erstellen, die sich selbst enthält?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 3

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Abschnitt 2. Kapitel 3
some-alt