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.
Elemente solcher Datenstrukturen werden üblicherweise als Knoten bezeichnet.
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
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.
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.
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen