IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Spécificateur de format %0x et %p ?


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 65
    Points : 98
    Points
    98
    Par défaut Spécificateur de format %0x et %p ?
    Bonjour,

    Quel est la différence entre le spécificateur %0x et %p, les deux sont censés me donner l'adresse d'une valeur mais je n'obtiens pas la même chose.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        int a = 10;
        printf("%p\n", &a);
    Le code ci-dessus m'affiche : 0x7fff5fbff6ac

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        int a = 10;
        printf("%0x\n", &a);
    Le code ci-dessus m'affiche : 5fbff6ac

    Mis à part que le premier me préfixe l'adresse par 0x, les deux adresses ne sont pas identiques.

    Merci d'avance, je débute en C :-)
    http://cocoa-notes.net - Développement sur Mac, iPhone & iPad

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Bonjour,

    Attention, tu as écrit le même code des deux côtés.

    — %x te renvoie la valeur d'un nombre entier écrit en hexadécimal. Le fait de le préfixer par « 0 » te permet, lorsque qu'une mise en forme a lieu, de combler les vides avec des zéros non-significatifs plutôt qu'avec des espaces ;
    — %p sert à représenter la valeur d'un pointeur en particulier, donc une adresse. Il se trouve qu'elle est elle aussi écrite en hexadécimal.

    Tes adresses ne sont pas si différentes qu'elles en ont l'air : la deuxième est égale à la première mais tronquée à ses derniers chiffres.

    C'est dû au fait que tu travailles probablement sur une machine 64 bits. Jusqu'à présent, pointeurs et entiers ordinaires avaient la même taille (32 bits) mais aujourd'hui, le C considère que ton entier est toujours sur 32 bits. Par contre, la taille d'une adresse est toujours connue et fixe. En l'occurrence 64.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 65
    Points : 98
    Points
    98
    Par défaut
    Ok, merci pour l'explication c'est parfaitement clair (oui je suis en 64 bits).

    (pour le code en double, erreur de copier/coller c'est corrigé).
    http://cocoa-notes.net - Développement sur Mac, iPhone & iPad

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème spécificateur dans chaîne de format
    Par InitSreen dans le forum C
    Réponses: 4
    Dernier message: 08/05/2015, 16h10
  2. Les spécificateurs de format de printf et scanf
    Par Mokette dans le forum Bibliothèque standard
    Réponses: 5
    Dernier message: 11/01/2008, 15h58
  3. Spécificateur de format %lf
    Par deubelte dans le forum C
    Réponses: 7
    Dernier message: 24/12/2006, 18h46
  4. lire une image au format RAW
    Par Anonymous dans le forum OpenGL
    Réponses: 5
    Dernier message: 20/05/2002, 00h11
  5. Réponses: 3
    Dernier message: 06/05/2002, 18h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo