C Structs en Pointers onder de knie krijgen: Een praktische gids
C Structs en Pointers onder de knie krijgen: Een praktische gids
Ontdek hoe je pointers gebruikt om struct-leden te navigeren, en leer dynamische geheugentoewijzing voor flexibele C-datastructuren.
Voordat je in pointers met structs duikt, maak je bekend met deze fundamentele onderwerpen:
Pointers gebruiken om naar structs te refereren
Hieronder volgt een beknopt voorbeeld dat laat zien hoe je een struct declareert en een pointer die ernaar verwijst.
struct Person {
int member1;
int member2;
/* extra leden */
};
int main(void) {
struct Person *ptr, harry;
/* ptr kan nu naar elk Person-exemplaar wijzen */
}
In dit fragment is ptr een pointer naar een struct Person instantie.
Voorbeeld: Struct-leden benaderen via een pointer
Om struct-velden via een pointer te lezen of schrijven, gebruik je de -> operator.
#include <stdio.h>
struct Person {
int age;
float weight;
};
int main(void) {
struct Person *personPtr, person1;
personPtr = &person1; /* wijst naar person1 */
printf("Voer leeftijd in: ");
scanf("%d", &personPtr->age);
printf("Voer gewicht in: ");
scanf("%f", &personPtr->weight);
printf("\nWeergave:\n");
printf("Leeftijd: %d\n", personPtr->age);
printf("Gewicht: %f", personPtr->weight);
return 0;
}
Hier slaat personPtr = &person1; het adres van person1 op in personPtr. Vervolgende toegang via personPtr->veld is equivalent aan (*personPtr).veld, wat beknopte syntaxis biedt.
personPtr->ageis hetzelfde als(*personPtr).agepersonPtr->weightis hetzelfde als(*personPtr).weight
Dynamische geheugentoewijzing voor structs
Wanneer het aantal benodigde struct-instanties niet bij compile-tijd bekend is, allokeer je geheugen tijdens runtime met de C standaardbibliotheek.
Voorbeeld: Een array van structs allokeren
#include <stdio.h>
#include <stdlib.h>
struct Person {
int age;
float weight;
char name[30];
};
int main(void) {
struct Person *ptr;
int i, n;
printf("Voer het aantal personen in: ");
scanf("%d", &n);
ptr = (struct Person*)malloc(n * sizeof(struct Person));
if (!ptr) {
fprintf(stderr, "Geheugentoewijzing mislukt\n");
return EXIT_FAILURE;
}
for (i = 0; i < n; ++i) {
printf("Voer voornaam en leeftijd in: ");
scanf("%s %d", (ptr + i)->name, &(ptr + i)->age);
}
printf("\nInformatie weergeven:\n");
for (i = 0; i < n; ++i) {
printf("Naam: %s\tLeeftijd: %d\n", (ptr + i)->name, (ptr + i)->age);
}
free(ptr);
return 0;
}
Het uitvoeren van het programma levert:
Voer het aantal personen in: 2 Voer voornaam en leeftijd in: Harry 24 Voer voornaam en leeftijd in: Gary 32 Informatie weergeven: Naam: Harry Leeftijd: 24 Naam: Gary Leeftijd: 32
Dit voorbeeld demonstreert hoe je n instanties van struct Person op de heap aanmaakt, gebruikersinvoer in elk leest en daarna de resultaten toont.
C Taal
- C# Keywords en Identifiers begrijpen: Regels, lijsten en best practices
- C# Classes & Objects: Fundamenten voor Robuuste OOP
- C# Abstract Classes & Methods: Een Praktische Gids
- C# Partial Classes en Methods: Een Praktische Gids
- C# Sealed Classes en Methods: Wanneer en Hoe Te Gebruiken
- C# structs: definitie, gebruik en verschillen met classes
- C Sleutelwoorden & Identifiers: Een Praktische Gids
- C-pointers onder de knie krijgen: Een praktische, expert-gids
- De relatie tussen arrays en pointers in C begrijpen
- C-programmeren: Adressen & pointers doorgeven aan functies – Een praktische gids
- C Structs onder de knie krijgen: Definitie, variabelen, toegang & geavanceerde voorbeelden