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
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
C-Structs Beheersen

bookPointers Binnen Structs

Essentiële datastructuren zoals stapels, gekoppelde lijsten en bomen 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.

Als je probeert een structuur te maken die een veld bevat 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 treedt er een oneindige recursie op 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) ernaar op.

Laten we bekijken hoe dit in de praktijk werkt.

main.c

main.c

copy
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 veld next werd niet expliciet geïnitialiseerd in de struct-initializer; het wordt automatisch geïnitialiseerd als een null-pointer (NULL), aangezien dit de standaardwaarde is voor pointers wanneer ze nergens naar 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?

Select the correct answer

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.

bookPointers Binnen Structs

Veeg om het menu te tonen

Essentiële datastructuren zoals stapels, gekoppelde lijsten en bomen 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.

Als je probeert een structuur te maken die een veld bevat 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 treedt er een oneindige recursie op 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) ernaar op.

Laten we bekijken hoe dit in de praktijk werkt.

main.c

main.c

copy
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 veld next werd niet expliciet geïnitialiseerd in de struct-initializer; het wordt automatisch geïnitialiseerd als een null-pointer (NULL), aangezien dit de standaardwaarde is voor pointers wanneer ze nergens naar 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?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 3
some-alt