Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Pointers Binnen Structs | Werken met Pointers en Structs
C-Structs

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.

Note
Opmerking

Elementen van dergelijke datastructuren worden meestal knooppunten genoemd.

data+structuren

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

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.

Note
Opmerking

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.

question mark

Waarom kunnen we geen structuur maken die zichzelf bevat?

Selecteer het correcte antwoord

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 3

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Sectie 2. Hoofdstuk 3
some-alt