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-pointers: Praktische stappen naar geavanceerd programmeren

Wat is een pointer?

pointer is een variabele die het geheugenadres van een andere variabele opslaat. Elke variabele heeft een adres (via & operator). Pointers maken dynamisch geheugenbeheer, arrays, strings en efficiënte functie-argumenten mogelijk.

Declaratie

type *naam;

Voorbeelden:

int *ip;      // pointer naar int
double *dp;   // pointer naar double
float *fp;
char *ch;     // pointer naar char (string)

Alle pointers hebben dezelfde grootte (adresgrootte), maar het basistype bepaalt rekenkunde en dereferentie.

Basisoperaties

  1. Declareren: int *ip;
  2. Adres toewijzen: ip = &var;
  3. Derefereren (waarde opvragen/wijzigen): *ip = 20; of printf("%d", *ip);

Voorbeeld

#include <stdio.h>

int main() {
    int var = 20;
    int *ip = &var;

    printf("Adres van var: %p\n", (void*)&var);
    printf("Adres in ip:   %p\n", (void*)ip);
    printf("Waarde via *ip: %d\n", *ip);

    *ip = 30;  // wijzig via pointer
    printf("Nieuwe waarde var: %d\n", var);  // 30
    return 0;
}

NULL pointers

Pointer die naar niets wijst. Goede gewoonte: initialiseer op NULL (gedefinieerd in <stdio.h>, <stdlib.h>, etc.).

int *ptr = NULL;
if (ptr) { /* niet null */ }
if (!ptr) { /* is null */ }

Adres 0 is gereserveerd voor OS; derefereren van NULL → crash (segmentation fault).

Pointer-rekenkunde

Alleen ++, --, +, - toegestaan. Stapgrootte = grootte van basistype.

int arr[5] = {10, 20, 30, 40, 50};
int *p = arr;  // p wijst naar arr[0]
printf("%d\n", *p);       // 10
printf("%d\n", *(p+2));   // 30
p++;                      // p wijst naar arr[1]

Geavanceerde pointer-concepten

ConceptBeschrijving
Array van pointersint *ptrs[10]; – array van 10 int-pointers
Pointer naar pointerint **pp; – voor 2D arrays, functies die pointer wijzigen
Pointers doorgeven aan functiesCall by reference: functie kan argument wijzigen
Pointer retournerenFunctie retourneert adres (van static, malloc, of parameter)
Functiepointersint (*funcPtr)(int, int); – voor callbacks, state machines

Dynamisch geheugenbeheer

<stdlib.h> functies:

  • malloc(size) – reserveert ongeïnitialiseerd geheugen
  • calloc(n, size) – reserveert en nul-initialiseert
  • realloc(ptr, new_size) – vergroot/klein
  • free(ptr) – geeft geheugen vrij
int *arr = malloc(10 * sizeof(int));
if (arr == NULL) { /* foutafhandeling */ }
arr[0] = 42;
free(arr);  // verplicht!

Veelvoorkomende fouten: ongeïnitialiseerde pointers, derefereren van NULL/vrije geheugen, geheugenlekken (geen free), buffer overruns.

C Taal

  1. C Variabelen, Constanten en Literals: Een Complete Gids
  2. C-opslagklassen begrijpen: Bereik, levensduur en prestaties
  3. C-pointers onder de knie krijgen: Een praktische, expert-gids
  4. De relatie tussen arrays en pointers in C begrijpen
  5. C-programmeren: Adressen & pointers doorgeven aan functies – Een praktische gids
  6. C Structs en Pointers onder de knie krijgen: Een praktische gids
  7. C++ Pointers Onder de Knie: Concepten, Voorbeelden & Praktische Toepassingen
  8. C Variabelen, Datatypes en Constanten – Een Praktische Gids
  9. Pointers in C: Een Uitgebreide Gids naar Typen, Gebruik en Best Practices
  10. Verilog-toewijzingen begrijpen: types, syntax en best practices
  11. Python's Global Keyword onder de knie krijgen: Hoe en wanneer te gebruiken