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 :

[pointeurs/référence]


Sujet :

C++

  1. #1
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut [pointeurs/référence]
    Je sais que ce topic n'est pas nouveau. Mais quelle est la différence entre un pointeur et une référence?

    Merci

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Les pointeurs existent en C. Les references n'existent pas en C. C'est une difference...

  3. #3
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Citation Envoyé par DaZumba
    Les pointeurs existent en C. Les references n'existent pas en C. C'est une difference...
    Quelle est la définition d'une référence ? Est-ce que &var n'est pas une référence sur var ?

  4. #4
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par Eusebius
    Quelle est la définition d'une référence ? Est-ce que &var n'est pas une référence sur var ?
    Pas vraiment. A strictement parler, &var est l'adresse de var (& est l'operateur adresse). Si on veut appeler ca 'reference', soit, mais il faut le preciser parce que ce n'est l'usage etabli.
    Je pense que le PO voulait parler du passage par reference a une fonction (i.e. eviter la copie de la variable passee en argument) qui existe en Fortran ou en C++, notamment. Mais le C ne connait que le passage par valeur.

  5. #5
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Je crois qu'une referrence en C++ pointe forcement sur quelquechose (donc pas sur NULL) et qu'on peut pas faire d'arithmetique dessus (pas d'addition, d'incrementation...)

  6. #6
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    On va finir par repondre a la question... En C++, un passage par reference signifie que l'on passe la variable a la fonction. Pas un pointeur contenant l'adresse de la variable, pas l'adresse de la variable. La variable. (Apres, c'est a l'implementation de determiner comment emuler ce comportement... Cela peut impliquer l'usage de pointeurs.)

  7. #7
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Citation Envoyé par DaZumba
    Pas vraiment. A strictement parler, &var est l'adresse de var (& est l'operateur adresse). Si on veut appeler ca 'reference', soit, mais il faut le preciser parce que ce n'est l'usage etabli.
    Oué ben fallait pas appeler ça un "opérateur de déréférencement" parce que c'est légèrement trompeur...

  8. #8
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par Eusebius
    fallait pas appeler ça un "opérateur de déréférencement" parce que c'est légèrement trompeur...
    L'operateur de dereferencement, c'est * (comme dans *p = 5; ). Mais tu as raison. Puisqu'on parle de derefencement, autant parler de referencement pour &...
    Il faudrait savoir de quoi le PO parle...

  9. #9
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Citation Envoyé par DaZumba
    L'operateur de dereferencement, c'est * (comme dans *p = 5; ).
    Oué, j'avais pris un raccourci.

  10. #10
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Je pense que ce sujet sera plus à son aise dans le forum C++ où les deux notions existent.

    Mais une petite recherche peut déjà t'en apprendre beaucoup :
    Différence entre Pointeurs et References
    réferences et pointeurs


  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394

  12. #12
    Membre émérite Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773

  13. #13
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    J'ai lu tout ce que vous m'avez donné.
    Super merci!
    Les références permettent donc d'éviter les histoires de pointeurs nuls, en faisant directement référence (c'est le cas de le dire ) à l'objet lui même. Une référence ne peut donc être nulle!
    Cependant, certains d'entre vous on parlé de tests supplémentaires à effectuer quand même, pour éviter une "segmentation fault".
    Comment peut-il y avoir ce genre d'erreur?

  14. #14
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Si on passe par exemple une référence pour le retour d'une fonction sur un objet créé dans la fonction, ça risque très fortement de planter magistralement.
    Problème, il est impossible de savoir si une référence est invalide. Donc il faut avoir un design de programme propre

  15. #15
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    ok merci Miles.

  16. #16
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Un truc qui me chiffonne quand même:
    quand tu passes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaFonction(type objet)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaFonction(type &objet)
    Quelle est la différence?
    La première passe l'adresse de l'objet et la deuxième sa référence.
    Y a t-il une copie quand on passe l'adresse?

    Merci!

  17. #17
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Dans le premier cas, le constructeur par copie est appelé, dans le second cas non.

  18. #18
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    D'accord...
    L'ajout de const permet le passage "protégé" par référence. Pour modifier l'objet , il faut alors appeler le constructeur de copie, puis retourner l'objet en fin de fonction...
    N'est-ce pas plus simple d'utiliser l'adresse (qui fait déjà la copie) et non pas la référence?

  19. #19
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Non, ce n'est pas plus simple, là on peut écrire comme si c'était le même objet. Dans l'autre cas, on doit faire un pointeur, déréferencer lors de l'appel, ...

Discussions similaires

  1. Différence Pointeur Référence.
    Par Astraya dans le forum C++
    Réponses: 60
    Dernier message: 28/11/2010, 16h54
  2. Pointeur & référence
    Par ramzouni dans le forum C++
    Réponses: 1
    Dernier message: 07/03/2010, 22h00
  3. Equivalent pointeur - référence
    Par MAX-k dans le forum C#
    Réponses: 2
    Dernier message: 24/02/2010, 13h27
  4. Réponses: 6
    Dernier message: 06/03/2009, 06h44
  5. Réponses: 8
    Dernier message: 26/08/2004, 18h59

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