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
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.