Pointers Binnen Structs
Veeg om het menu te tonen
Essentiële datastructuren zoals stacks, linked lists en trees kunnen verwijzingen bevatten naar andere objecten van hetzelfde type om verbindingen of relaties tussen elementen te creëren. Datastructuren worden later in deze cursus behandeld.
Elementen van dergelijke datastructuren worden meestal knooppunten genoemd.
Als je probeert een structuur te maken met een veld van hetzelfde type als de structuur zelf, krijg je een foutmelding:
struct Node {
int data;
struct Node next; // error: `Node` structure contains itself
};
In dit geval ontstaat er een oneindige recursie bij het bepalen van de grootte van zo'n structuur.
Dit concept kan worden geïmplementeerd met behulp van een pointer naar een structuur:
struct Node {
int data;
struct Node *next; // pointer to the `Node` structure
};
Deze code werkt omdat de compiler de exacte grootte van een pointer kent — meestal 4 of 8 bytes, afhankelijk van het systeem.
De compiler probeert niet de grootte van de volledige geneste structuur te berekenen; hij slaat eenvoudigweg een referentie (address) ervan op.
Laten we bekijken hoe dit in de praktijk werkt.
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" }; - het next-veld werd niet expliciet geïnitialiseerd in de struct-initialisator; het wordt automatisch geïnitialiseerd als een null-pointer (NULL), aangezien dit de standaardwaarde is voor pointers wanneer ze niet naar een object verwijzen.
while (pointer != NULL) - de lus wordt uitgevoerd totdat de pointer naar het NULL-adres wijst.
In programmeertalen zoals C en C++ betekent een pointer die NULL is meestal het einde van een lijst (of andere datastructuur). Daarom wordt deze lus uitgevoerd totdat pointer NULL is, wat geïnterpreteerd kan worden als het bereiken van het einde van de lijst of datastructuur.
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.