ptrdiff_t
|
Défini dans l'en-tête
<stddef.h>
|
||
|
typedef
/*implementation-defined*/
ptrdiff_t
;
|
||
ptrdiff_t
est le type entier signé du résultat de la
soustraction de deux pointeurs
.
|
La largeur en bits de
|
(depuis C99)
(jusqu'à C23) |
|
La largeur en bits de
|
(depuis C23) |
Table des matières |
Notes
ptrdiff_t
est utilisé pour l'arithmétique des pointeurs et l'indexation des tableaux, si des valeurs négatives sont possibles. Les programmes qui utilisent d'autres types, tels que
int
, peuvent échouer sur, par exemple, les systèmes 64 bits lorsque l'index dépasse
INT_MAX
ou s'il repose sur une arithmétique modulaire 32 bits.
Seuls les pointeurs vers des éléments d'un même tableau (y compris le pointeur pointant juste après la fin du tableau) peuvent être soustraits l'un de l'autre.
Si un tableau est si grand (plus de
PTRDIFF_MAX
éléments, mais inférieur ou égal à
SIZE_MAX
octets), que la différence entre deux pointeurs peut ne pas être représentable comme
ptrdiff_t
, le résultat de la soustraction de deux tels pointeurs est indéfini.
Pour les tableaux de caractères plus courts que
PTRDIFF_MAX
,
ptrdiff_t
agit comme la contrepartie signée de
size_t
: il peut stocker la taille du tableau de n'importe quel type et est, sur la plupart des plateformes, synonyme de
intptr_t
).
Implémentation possible
typedef typeof((int*)nullptr - (int*)nullptr) ptrdiff_t; // valide depuis C23 |
Exemple
#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); }
Sortie possible :
PTRDIFF_MAX = 9223372036854775807 p2-p1 = 5
Références
- Norme C23 (ISO/CEI 9899:2024) :
-
- 7.19 Définitions communes <stddef.h> (p: TBD)
-
- 7.20.3 Limites des autres types entiers (p: TBD)
- Norme C17 (ISO/CEI 9899:2018) :
-
- 7.19 Définitions communes <stddef.h> (p: 211)
-
- 7.20.3 Limites des autres types entiers (p: 215)
- Norme C11 (ISO/IEC 9899:2011) :
-
- 7.19 Définitions communes <stddef.h> (p: 288)
-
- 7.20.3 Limites des autres types entiers (p: 293)
- Norme C99 (ISO/CEI 9899:1999) :
-
- 7.17 Définitions communes <stddef.h> (p: 253)
-
- 7.18.3 Limites des autres types entiers (p: 258)
- Norme C89/C90 (ISO/CEI 9899:1990) :
-
- 4.1.6 Définitions communes <stddef.h>
Voir aussi
|
type entier non signé renvoyé par l'opérateur
sizeof
(typedef) |
|
|
décalage en octets depuis le début d'un type struct jusqu'au membre spécifié
(macro de fonction) |
|
|
Documentation C++
pour
ptrdiff_t
|
|