Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

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->age is hetzelfde als (*personPtr).age
  • personPtr->weight is 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

  1. C# Keywords en Identifiers begrijpen: Regels, lijsten en best practices
  2. C# Classes & Objects: Fundamenten voor Robuuste OOP
  3. C# Abstract Classes & Methods: Een Praktische Gids
  4. C# Partial Classes en Methods: Een Praktische Gids
  5. C# Sealed Classes en Methods: Wanneer en Hoe Te Gebruiken
  6. C# structs: definitie, gebruik en verschillen met classes
  7. C Sleutelwoorden & Identifiers: Een Praktische Gids
  8. C-pointers onder de knie krijgen: Een praktische, expert-gids
  9. De relatie tussen arrays en pointers in C begrijpen
  10. C-programmeren: Adressen & pointers doorgeven aan functies – Een praktische gids
  11. C Structs onder de knie krijgen: Definitie, variabelen, toegang & geavanceerde voorbeelden