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 chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    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 expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    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
    Points : 3 377
    Points
    3 377
    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 expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    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 expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    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 expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    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
    Points : 3 377
    Points
    3 377
    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 expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    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
    Points : 3 377
    Points
    3 377
    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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    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 confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473

  12. #12
    Membre éclairé 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
    Points : 795
    Points
    795

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    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 : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    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 chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    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 : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    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 : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    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