#include <stdint.h> // <cstdint> en C++
Les types intptr_t et uintptr_t sont des types entiers capables de conserver une valeur de pointeur. Le premier
est signé, le second ne l'est pas. Ils sont utiles dans du code bas niveau, pour produire des traces, construire une clé de hachage ou
transporter temporairement une adresse sous forme entière.
Ces types restent optionnels : ils ne sont définis que si l'implémentation sait convertir un pointeur vers un entier, puis revenir vers un pointeur équivalent. Dans la pratique, ils sont disponibles sur la plupart des plates-formes actuelles.
Le bloc suivant convertit un pointeur vers un entier non signé, puis reconstruit le pointeur initial.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <stdint.h> #include <stdio.h> #include <stdlib.h> int main() { int value = 42; int * pointer = &value; uintptr_t rawAddress = (uintptr_t) pointer; int * restoredPointer = (int *) rawAddress; printf( "address == %lu\n", (unsigned long) rawAddress ); printf( "value == %d\n", *restoredPointer ); return EXIT_SUCCESS; } |
L'adresse affichée dépend bien entendu de chaque exécution. En revanche, la valeur relue par le pointeur reconstruit reste la même.
address == 6422296 value == 42
intptr_t et uintptr_t répondent surtout à des besoins de code bas niveau ou de diagnostic.
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :