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 :

Problème de Pointeur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 10
    Par défaut Problème de Pointeur
    Bonsoir,

    J'ai un petit problème de pointeur. Je voudrais donner à un pointeur une adresse contenu dans une structure.
    J'ai déclaré mon pointeur
    int *Ptr;
    Initialisé
    Ptr = &truc; // truc est aussi un entier

    voici la structure (qui fonctionne j'ai vérifié)
    struct Edit{
    int Address;
    int Data[200];
    int Value[2];
    } ;


    En fait, je voudrais que l'adresse contenu dans Edit.Address soit l'adresse de mon pointeur et la je coince !

    Si quelqu'un a une idée elle est bien venue. Merci à tous.

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    En fait, je voudrais que l'adresse contenu dans Edit.Address soit l'adresse de mon pointeur
    Dans ce cas, le type du champ address ne peut être un int. Ce doit être du type "adresse de qq chose" soit
    "qq chose" *
    Conne ce "qq chose" est int *,un pointeur sur int, la déclaration de ce champ est int **
    On a alors
    Edit.Address = &Ptr

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 10
    Par défaut
    Merci de votre réponse mais en fait je voudrai l'inverse comme

    Ptr = &Edit.Address

    Que mon pointeur pointe sur l'adresse contenue dans Edit.Address

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Ptr = &Edit.Address
    Que mon pointeur pointe sur l'adresse contenue dans Edit.Address
    Edit.Address ne contient pas une adresse mais un int. Ptr contiendra l'adresse de Edit.Address, il pointera sur Edit.Address
    Dans ce cas (comme dans l'autre) il faut que Edit représente une instance de la structure

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 10
    Par défaut
    oui je suis d'accord l'écriture n'est pas correct car cela me renvoie l'adresse de la structure alors que je voudrais que ce soit l'entier contenu dans Edit.Address qui soit l'adresse ou pointe mon pointeur.

    initialement mon pointeur vaut Ptr = &Truc; soit 0x300 par exemple
    A cette adresse, on trouve un entier : 0x60 par exemple, *Ptr renvoie 0x60

    Maintenant, Edit.Address contient 0x302, je voudrais que le pointeur pointe sur 0x302 au lieu de 0x300. Ainsi en changant le contenu de ma structure je change l'adresse de mon pointeur.

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Olaf2
    oui je suis d'accord l'écriture n'est pas correct car cela me renvoie l'adresse de la structure alors que je voudrais que ce soit l'entier contenu dans Edit.Address qui soit l'adresse ou pointe mon pointeur.

    initialement mon pointeur vaut Ptr = &Truc; soit 0x300 par exemple
    A cette adresse, on trouve un entier : 0x60 par exemple, *Ptr renvoie 0x60

    Maintenant, Edit.Address contient 0x302, je voudrais que le pointeur pointe sur 0x302 au lieu de 0x300. Ainsi en changant le contenu de ma structure je change l'adresse de mon pointeur.
    En gros, tu veux utiliser un entier pour initialiser un pointeur, c'est ça ? C'est pas portable, mais si ton compilateur le supporte tu peux faire ça :
    c'est à dire dans ton cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int *Ptr = (int *) Edit.Address;
    mais il n'y a aucune garantie que ce code fonctionne, notamment que Ptr soit un pointeur valide.

    Ce que tu veux faire est plutôt étrange et j'ai du mal à voir à quoi ça peut servir. Ca sens l'erreur de conception à plein nez...

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 391
    Par défaut
    PS: Si ton environnement de compilation respecte suffisament les standards, le type intptr_t sera plus approprié que int dans la structure.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Médinoc
    PS: Si ton environnement de compilation respecte suffisament les standards, le type intptr_t sera plus approprié que int dans la structure.
    Ou void*, tout simplement, c'est fait pour et c'est portable, et c'est standard depuis 1989...

    Je n'ai jamais compris pourquoi on cherchait à mettre une adresse dans un entier alors qu'un pointeur est fait pour ça.

    "Y'a de trucs qui me dépassent"

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 10
    Par défaut Merci à tous
    Merci à tous de vos réponces, je vais essayer toute les solutions proposées. Il me semblait pas que cela soit si "extraordinaire" de donner une adresse à un pointer à partir d'un entier pour le faire pointer à cette adresse.
    Olivier

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    je viens juste d'y penser en regardant ta conclusion :

    et si tu faisais une union :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    typedef union {
     
        struct Edit ;
         int     Ptr ;
    }
    physiquement les 2 Ptr et Edit.Address occupent la même place...

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

Discussions similaires

  1. Problème de pointeurs..embrouillé
    Par Frenchy dans le forum C++
    Réponses: 11
    Dernier message: 10/03/2005, 16h33
  2. Problème de pointeur avec un TQuery
    Par Oluha dans le forum Bases de données
    Réponses: 3
    Dernier message: 25/01/2005, 13h57
  3. Problème de pointeur
    Par toma_lille dans le forum C++
    Réponses: 1
    Dernier message: 07/12/2004, 21h26
  4. [MFC] Problème de pointeur !!
    Par acastor dans le forum MFC
    Réponses: 7
    Dernier message: 19/03/2004, 15h50
  5. TBitmap et problèmes de pointeurs...
    Par benj63 dans le forum C++Builder
    Réponses: 8
    Dernier message: 28/07/2003, 13h39

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