afficher l'adresse d'une variable en C
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

afficher l'adresse d'une variable en C



  1. #1
    cosmoff

    afficher l'adresse d'une variable en C


    ------

    bonjour,
    je souhaite afficher l'adresse d'une variable à travers une fonction mais ca ne marche pas.
    voici mon code :
    Code:
    void adress(int b)//la variable 'b' recupere l'adresse de 'a' du main
    {
    	printf("l adresse de a est : %x\n",b);// on affiche l'adresse en hexa
    }
    
    int main(int argc, char const *argv[])
    {
    	int a = 0;
    	adress(&a);
    	
    	return 0;
    }
    mon IDE indique qu'il attend un pointeur du genre void adress(int *b) dans ma fonction, mais techniquement ma variable b devrait juste prendre
    l'adresse de a du main mais pas son contenu donc ca devrait marcher.

    avez vous une explication?

    merci d'avance

    -----

  2. #2
    invite2d7144a7

    Re : afficher l'adresse d'une variable en C

    Bonjour,

    Erreur classique, et dangereuse : confondre int et pointeur !

    Leurs tailles ne sont pas forcément identiques, et d'ailleurs ton compilateur te prévient que tu confonds.

  3. #3
    cosmoff

    Re : afficher l'adresse d'une variable en C

    l'adresse de ma ram va jusqu'a 4 octets comme mon INT donc la taille ne devrait pas poser de probleme.
    si je met dans mon main :
    Code:
    printf("l adresse de a est : %x\n",&a);
    il me donne : f09872cc donc ca marche,

    mais avec la fonction ca ne marche pas alors que je fais la meme chose techniquement
    Dernière modification par cosmoff ; 24/10/2015 à 22h10.

  4. #4
    invite0bbe92c0

    Re : afficher l'adresse d'une variable en C

    Citation Envoyé par cosmoff Voir le message
    mais avec la fonction ca ne marche pas alors que je fais la meme chose techniquement
    Pas du tout.

    Dans un cas on dopnne une instruction pour interprétation "at runtime" (la chaine de format au printf), ce paramétre ne faisant pas l'objet d'un contrôle de type "at compile-time" (cf. la définition de la fonciton), dans l'autre on passe un pointeur là où une valeur est attendue, et c'est le compilateur qui refuse.

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : afficher l'adresse d'une variable en C

    Citation Envoyé par cosmoff Voir le message
    l'adresse de ma ram va jusqu'a 4 octets comme mon INT donc la taille ne devrait pas poser de probleme.
    si je met dans mon main :
    Code:
    printf("l adresse de a est : %x\n",&a);
    il me donne : f09872cc donc ca marche,

    mais avec la fonction ca ne marche pas alors que je fais la meme chose techniquement
    Essaie plutôt:
    Code:
    void adress(int* b)//la variable 'b' recupere l'adresse de 'a' du main{
    	printf("l adresse de a est : %p\n",b);// on affiche l'adresse en hexa
    }

  7. #6
    cosmoff

    Re : afficher l'adresse d'une variable en C

    ca marche jack merci !!!
    et etrangement sur code blocks ca marche sans utiliser %p alors que sur linux il faut obligatoirement mettre %p

  8. #7
    Jack
    Modérateur

    Re : afficher l'adresse d'une variable en C

    etrangement sur code blocks ca marche sans utiliser %p alors que sur linux il faut obligatoirement mettre %p
    Qu'entends-tu exactement par "ça marche"? Problème à la compilation ou a l'exécution?

  9. #8
    cosmoff

    Re : afficher l'adresse d'une variable en C

    sur code blocks aucun probleme avec le %x lors de la compilation et de l'exécution, mais sur linux avec le %x la compilation ne marche pas, il faut mettre %p pour que la compilation se fasse.

  10. #9
    Jack
    Modérateur

    Re : afficher l'adresse d'une variable en C

    Citation Envoyé par cosmoff Voir le message
    sur code blocks aucun probleme avec le %x lors de la compilation et de l'exécution, mais sur linux avec le %x la compilation ne marche pas, il faut mettre %p pour que la compilation se fasse.
    Pourquoi ne donnes-tu pas le message d'erreur?

    Il est aussi possible que les compilateurs soient difféfrents ou paramétrés de manière différente.

  11. #10
    inviteb9f49292

    Re : afficher l'adresse d'une variable en C

    Citation Envoyé par cosmoff Voir le message
    sur code blocks aucun probleme avec le %x lors de la compilation et de l'exécution, mais sur linux avec le %x la compilation ne marche pas, il faut mettre %p pour que la compilation se fasse.
    "%x" est pour afficher un type "entier" au format hexadécimal, "%p" pour afficher un type "pointeur sur", il faudrait vérifier ce que dit la norme mais si "%p" fait bien partie de la norme, c'est celui qu'il faut utiliser pour afficher un pointeur quelque soit la plateforme utilisée (compilateur + OS + CPU). L'utilisation de "%x" pour afficher un pointeur est dangereuse mais devrait compiler avec l'affichage d'un "warning".
    Mais, la norme évolue, tu utilises peut-être un compilateur C99 alors que "%p" n'est disponible que depuis C11 ? Ou bien tu as peut-être une option de compilation traitant les avertissements comme des erreurs?

  12. #11
    invite0bbe92c0

    Re : afficher l'adresse d'une variable en C

    Citation Envoyé par lou_ibmix_xi Voir le message
    L'utilisation de "%x" pour afficher un pointeur est dangereuse mais devrait compiler avec l'affichage d'un "warning".
    En aucun cas !
    Le compilateur n'analyse pas ( et n'a pas à analyser) le contenu de l'argument chaine passé à une fonction.(même si cet argument est "normalisé").

  13. #12
    inviteb9f49292

    Re : afficher l'adresse d'une variable en C

    Il faut au moins "-Wformat" pour gcc ou clang. Sous mon ubuntu 14.04 j'ai pas besoin d'ajouter cette option elle y est par défaut pour les deux. Mais j'ai peut être bidouiller un alias...

Discussions similaires

  1. afficher la valeur d'une variable sur un lcd
    Par invite1f39ae77 dans le forum Électronique
    Réponses: 12
    Dernier message: 19/01/2011, 19h48
  2. Script afficher NOM PC + ADRESSE IP sur fond d'écran
    Par invite4ffbd5c8 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 12/12/2009, 23h31
  3. Afficher la valeur d'une variable sur un lcd
    Par invitea5fe4634 dans le forum Électronique
    Réponses: 5
    Dernier message: 27/03/2008, 19h02
  4. Comment définir une variable pour l'afficher sur un LCD
    Par invite3c35244f dans le forum Électronique
    Réponses: 4
    Dernier message: 21/11/2007, 09h46