0 Tage Serie
c / expert
Snippet

Zeigersubtraktion und ptrdiff_t

Das Ergebnis der Subtraktion zweier Zeiger ist vom vorzeichenbehafteten Ganzzahltyp 'ptrdiff_t'. Diese Operation ist nur definiert, wenn beide Zeiger auf Elemente desselben Arrays oder auf das Element direkt nach dem letzten zeigen. Die Subtraktion von Zeigern auf verschiedene Typen (wie char *) ermöglicht die Berechnung des exakten Byte-Abstands zwischen Speicheradressen.

snippet.c
c
1
2
3
4
5
6
7
8
#include <stddef.h>
int buffer[1024];
int *start = &buffer[10];
int *end = &buffer[100];
ptrdiff_t offset = end - start;
size_t bytes = (char *)end - (char *)start;
Erklärung
1
ptrdiff_t offset = end - start;
Berechnet die Anzahl der 'int'-Elemente zwischen den beiden Zeigern (Ergebnis ist 90).
2
(char *)end - (char *)start
Das Casten auf char* stellt sicher, dass die Subtraktion den Abstand in Bytes anstelle der Elementanzahl widerspiegelt.