Namespaces
Variants

ptrdiff_t

From cppreference.net
< c ‎ | types
Definiert in Header <stddef.h>
typedef /*implementation-defined*/ ptrdiff_t ;

ptrdiff_t ist der vorzeichenbehaftete Ganzzahltyp des Ergebnisses der Subtraktion zweier Zeiger .

Die Bitbreite von ptrdiff_t beträgt mindestens 17.

(seit C99)
(bis C23)

Die Bitbreite von ptrdiff_t beträgt mindestens 16.

(seit C23)

Inhaltsverzeichnis

Hinweise

ptrdiff_t wird für Zeigerarithmetik und Array-Indizierung verwendet, wenn negative Werte möglich sind. Programme, die andere Typen verwenden, wie int , können beispielsweise auf 64-Bit-Systemen fehlschlagen, wenn der Index INT_MAX überschreitet oder wenn sie auf 32-Bit-modularer Arithmetik basieren.

Nur Zeiger auf Elemente desselben Arrays (einschließlich des Zeigers eins hinter dem Ende des Arrays) dürfen voneinander subtrahiert werden.

Wenn ein Array so groß ist (mehr als PTRDIFF_MAX Elemente, aber gleich oder kleiner als SIZE_MAX Bytes), dass die Differenz zwischen zwei Zeigern möglicherweise nicht als ptrdiff_t darstellbar ist, ist das Ergebnis der Subtraktion zweier solcher Zeiger undefiniert.

Für Zeichenarrays kürzer als PTRDIFF_MAX , ptrdiff_t fungiert als das vorzeichenbehaftete Gegenstück von size_t : Es kann die Größe des Arrays jedes Typs speichern und ist auf den meisten Plattformen synonym mit intptr_t ).

Mögliche Implementierung

typedef typeof((int*)nullptr - (int*)nullptr) ptrdiff_t; // gültig seit C23

Beispiel

#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
int main(void)
{
    const size_t N = 100;
    int numbers[N];
    printf("PTRDIFF_MAX = %ld\n", PTRDIFF_MAX);
    int *p1 = &numbers[18], *p2 = &numbers[23];
    ptrdiff_t diff = p2 - p1;
    printf("p2-p1 = %td\n", diff);
}

Mögliche Ausgabe:

PTRDIFF_MAX = 9223372036854775807
p2-p1 = 5

Referenzen

  • C23-Standard (ISO/IEC 9899:2024):
  • 7.19 Allgemeine Definitionen <stddef.h> (S: TBD)
  • 7.20.3 Grenzen anderer Ganzzahltypen (S: TBD)
  • C17-Standard (ISO/IEC 9899:2018):
  • 7.19 Allgemeine Definitionen <stddef.h> (S: 211)
  • 7.20.3 Grenzen anderer Ganzzahltypen (S: 215)
  • C11-Standard (ISO/IEC 9899:2011):
  • 7.19 Allgemeine Definitionen <stddef.h> (S: 288)
  • 7.20.3 Grenzen anderer Ganzzahltypen (S: 293)
  • C99-Standard (ISO/IEC 9899:1999):
  • 7.17 Allgemeine Definitionen <stddef.h> (S: 253)
  • 7.18.3 Grenzwerte anderer Ganzzahltypen (S: 258)
  • C89/C90 Standard (ISO/IEC 9899:1990):
  • 4.1.6 Allgemeine Definitionen <stddef.h>

Siehe auch

Vorzeichenloser Ganzzahltyp, zurückgegeben durch den sizeof Operator
(typedef)
Byte-Offset vom Anfang eines Struct-Typs zum angegebenen Mitglied
(Funktionsmakro)
C++-Dokumentation für ptrdiff_t