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 :

Les fameux pointeurs


Sujet :

C++

  1. #1
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut Les fameux pointeurs
    Bonjour, j'aimerais me faire un pointeur vers une map, mais je n'y arrive pas du tout ahah


    Supposons que je fais


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    const std::map<int,std::vector<int> > *m;
    m = UneAutreClasse->GetMap(); 
     
     
    // ...
    const std::map<int,std::vector<int> >& GetMap { return DaMap; }
    Pourquoi cela ne fonctionne-t-il pas avec un pointeur, mais si m est une référence (&m) cela fonctionne?!

    Merci de m'éclairer sur les fameux pointeurs!

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Kikou !!

    tu essaies d'assigner une référence à un pointeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    const std::map<int,std::vector<int> > *m;
    m = &UneAutreClasse->GetMap(); 
     
     
    // ...
    const std::map<int,std::vector<int> >& GetMap { return DaMap; }
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    const std::map<int,std::vector<int> > *m;
    m = UneAutreClasse->GetMap(); 
     
     
    // ...
    const std::map<int,std::vector<int> >* GetMap { return &DaMap; }
    sinon, tout ce que tu fais, c'est assigner une référence (accès directe) à un pointeur (accès indirect) donc impossible, le type n'est pas le même
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Ah, subtile quand même!

    Je joue avec ca un peu et j'te tiens au courant du dénouement!

  4. #4
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Voila ca fonctionne, mais est-il préférable de faire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     const std::map<int,std::vector<int> > *m = p_frm->m_treeCtrl->GetToDraw();  
     
    //...
    const std::map<int,std::vector<int> >* GetToDraw() { return &todraw; }
    ou utiliser des références?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    const std::map<int,std::vector<int> > &m = p_frm->m_treeCtrl->GetToDraw();  
     
    //...
    const std::map<int,std::vector<int> >& GetToDraw() { return todraw; }

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Une référence bien sûr, puisque finalement tout ce que tu veux c'est récupérer un alias sur une certaine variable membre, sans alourdir le code avec une syntaxe et des tests supplémentaires.

    Un pointeur aurait été utile si par exemple tu aurais dû pouvoir renvoyer NULL.

  6. #6
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    J'ajouterais également que le principal avantage d'un pointeur est qu'on puisse modifier ce sur quoi il pointe, ce n'est pas possible pour une référence

    ensuite, il faut voir ce dont tu as besoin...

    c'est certain que les références sont préférables dans la mesure du possible ^^
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  7. #7
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 237
    Points : 283
    Points
    283
    Par défaut
    Est-il plus couteux d'utiliser une référence ou un pointeur ?

    J'ajouterais également que le principal avantage d'un pointeur est qu'on puisse modifier ce sur quoi il pointe, ce n'est pas possible pour une référence
    C'est pour cette raison que je n'uilise pas les références

  8. #8
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    On ne peut pas modifier ce qui est à l'adresse avec les références?!

    Pourtant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int a = 2;
    int &b = a;
     
    b++;
    Modifiera la valeur de a tout comme un pointeur non?


    Équivalent de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int a = 2;
    int *b = &a;
    b++;

  9. #9
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    ce que je veux dire, c'est que dans le code que tu as montré, b pointe et pointera TOUJOURS sur a...

    il n'est pas possible de faire ce qu'il serait possible de faire ainsi avec un pointeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int a, b;
    int* c = &a;
    //manip de c (donc modifs de a)
    c = &b;
    //manip de c (maintenant de b)
    si avec une référence on faisait ça, ça donnerais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int a, b;
    int& c = a;
    //manip de c (donc modifs de a)
    c = b;//équivalent à "a = b;"
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  10. #10
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par Tipoun
    Est-il plus couteux d'utiliser une référence ou un pointeur ?
    Je ne pense pas que les différences soient réellement significatives, mais je serais tenté de dire qu'il est moins couteux d'utilise une référence, puisque les opérations de pointage ne se font que lors de la construction, ensuite c'est comme pour une variable classique
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  11. #11
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Swoog, tu dois être enseignant ou tu devrais t'enligner dans cette branche. Tu es génial

  12. #12
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par vdumont
    Swoog, tu dois être enseignant ou tu devrais t'enligner dans cette branche. Tu es génial
    lol Merci beaucoup, mais je ne pense pas que j'aurais le courage de tenir tête à une cinquantaine (ou même une vingtaine) de jeunes **** qui écoutent pas (il suffit de voir comment on est en classe avec les potes, par moment je plain un peu les profs mdr)
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  13. #13
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Une référence est bien souvent un pointeur en interne, c'est exactement la même chose une fois compilé. La référence ce n'est qu'une aide syntaxique.

    Les "opérations de pointage" ne se font donc pas qu'à la construction, je ne vois pas comment cela pourrait fonctionner sinon

  14. #14
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Laurent, au sujet du NULL pour les pointeurs. Peut-on faire directement if (pointeur == NULL) ???

  15. #15
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Citation Envoyé par vdumont
    Laurent, au sujet du NULL pour les pointeurs. Peut-on faire directement if (pointeur == NULL) ???
    Pourquoi pas ? Tu aurais voulu faire quoi ?

  16. #16
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    J'étais incertain de la syntaxe

  17. #17
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par Laurent Gomila
    Les "opérations de pointage" ne se font donc pas qu'à la construction, je ne vois pas comment cela pourrait fonctionner sinon
    hum... c'est vrai sur le coup j'ai ça... mais après reflexion c'est la même chose lol
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  18. #18
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    à vous!

  19. #19
    Membre actif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 296
    Points : 252
    Points
    252
    Par défaut quel est la sens du concept de reference ?
    les pointeurs je vois parfaitement; ils contiennent une adresse memoire?

    la reference pour moi justement l'extractionde cette adresse memoire

    par contre, dans ce morceau de code (citer plus haut) j'ai du mal a voir le sens de la reference.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <div style="text-align: left;"> 
    int a = 2;
    int &b = a;
     
    b++;</div>
    merci pour les reponses.

    note : ma vision du pointeur est assez simpliste, je suis plutot "javaiste". ca fit une eternite que j'ai aps fait de C++ et j'admet que le retour est difficile.

    merciiiiiiii

    cedric

  20. #20
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    en gros,
    le code que tu mentionne est strictement équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int a = 2;
    int &b = *&a;
     
    b++;
    Je pense que le passage par les pointeurs te permet de mieux voir, non ?
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Les fonctions / pointeurs
    Par Delnir dans le forum Débuter
    Réponses: 18
    Dernier message: 08/12/2008, 18h41
  2. Réponses: 5
    Dernier message: 18/11/2008, 10h39
  3. Réponses: 2
    Dernier message: 16/07/2007, 15h34
  4. les coordonnées pointeur souris
    Par Moine dans le forum C
    Réponses: 4
    Dernier message: 16/06/2007, 02h52
  5. [XSLT][->texte] les fameux retour chariot et a la ligne
    Par SOPRA-Eherve dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 26/06/2006, 23h14

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