ptrdiff_t
|
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
|
(seit C99)
(bis C23) |
|
Die Bitbreite von
|
(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
|
|