Participer au site avec un Tip
Rechercher
 

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 :

Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation avec
Le langage C
Voir le programme détaillé

Les types intptr_t et uintptr_t

Les types least et fast Les types intmax_t et uintmax_t


Entête à inclure

#include <stdint.h>  // <cstdint> en C++

Types entiers capables de stocker une adresse

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;
}
Conversion d'un pointeur en entier

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
Convertir une adresse en entier ne doit pas devenir une habitude de programmation courante. Si vous devez manipuler une adresse, gardez un pointeur. Les types intptr_t et uintptr_t répondent surtout à des besoins de code bas niveau ou de diagnostic.

Sujets connexes

Constantes de limites
La librairie stdint.h
Types intmax_t et uintmax_t
Utilisation de pointeurs


Les types least et fast Les types intmax_t et uintmax_t




Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation avec
Le langage C
Voir le programme détaillé