Namensräume
Varianten
Aktionen

ptrdiff_t

Von cppreference.com
< c‎ | types
Definiert im Header <stddef.h>
typedef /*implementierungsdefiniert*/ ptrdiff_t;

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

Die Bitbreite von ptrdiff_t ist nicht kleiner als 17.

(seit C99)
(bis C23)

Die Bitbreite von ptrdiff_t ist nicht kleiner als 16.

(seit C23)

Inhalt

[bearbeiten] Hinweise

ptrdiff_t wird für Zeigerarithmetik und Array-Indizierung verwendet, wenn negative Werte möglich sind. Programme, die andere Typen wie int verwenden, können z. B. auf 64-Bit-Systemen fehlschlagen, wenn der Index INT_MAX überschreitet oder wenn er auf 32-Bit-Modulararithmetik angewiesen ist.

Nur Zeiger auf Elemente desselben Arrays (einschließlich des Zeigers, der auf das Ende des Arrays folgt) dürfen voneinander subtrahiert werden.

Wenn ein Array so groß ist (größer als PTRDIFF_MAX Elemente, aber gleich oder kleiner als SIZE_MAX Bytes), dass die Differenz zweier Zeiger nicht als ptrdiff_t dargestellt werden kann, ist das Ergebnis der Subtraktion zweier solcher Zeiger undefiniert.

Für char-Arrays, die kürzer als PTRDIFF_MAX sind, fungiert ptrdiff_t als das vorzeichenbehaftete Gegenstück zu size_t: Es kann die Größe des Arrays eines beliebigen Typs speichern und ist auf den meisten Plattformen synonym mit intptr_t.

[bearbeiten] Mögliche Implementierung

typedef typeof((int*)nullptr - (int*)nullptr) ptrdiff_t; // valid since C23

[bearbeiten] 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

[bearbeiten] Referenzen

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

[bearbeiten] Siehe auch

vorzeichenloser Ganzzahltyp, der vom Operator sizeof zurückgegeben wird
(typedef) [bearbeiten]
Byte-Offset vom Anfang eines Strukturtyps zu einem angegebenen Element
(function macro) [bearbeiten]
C++ Dokumentation für ptrdiff_t