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 :

Différence entre Pointeurs et References


Sujet :

C++

  1. #1
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut Différence entre Pointeurs et References
    Bonjour,
    Je viens juste de débuter avec C++. J'ai déjà passé pas mal de temps avec d'autres langages comme HTML, VB, Pascal ...
    Ce qui me bloque c'est que je n'arrive pas à faire la différence entre les pointeurs et les references. Si quelqu'un pourrait m'éclairer un peu la lanterne.
    Si vous pouvez me donner quelques cas d'utilisation aussi se serait un grand plus ...

    Merci
    Scuse me while I kiss the sky ! Jimi Hendrix

  2. #2
    Membre actif Avatar de Steki-kun
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 222
    Points : 281
    Points
    281
    Par défaut
    a priori, c'est très classique, as-tu regardé dans la FAQ ? Il y a, je pense, ce qu'il faut comme explication sur les pointeurs et sur &.
    I'm the kind of guy that until it happens, I won't worry about it. - R.H. RoY05, MVP06

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 74
    Points : 65
    Points
    65
    Par défaut
    un pointeur est quelque chose qui pointe sans plaisanter il pointe vers une adresse memoire qui contient generalement une variable. la reference designe aussi l'adresse de la variable. c'est pour cela que quand tu passes une variable en parametre tu peux la passer par reference c'est a dire par adresse

  4. #4
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 749
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 749
    Points : 10 666
    Points
    10 666
    Billets dans le blog
    3

  5. #5
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 55
    Points : 54
    Points
    54
    Par défaut
    pour étoffer le post... j'ai compris le principe de la reference mais je ne comprend pas comment ca se gere dans tout un projet
    sachant qu'on ne peut pas creer de collection de references (vecteur, tableau, ...)
    et si on commence à mélanger les deux, c'est encore plus bordélique

    il y a aussi le cas d'un membre d'instance qui est construit dans le constructeur... comment NE PAS utiliser de pointeur ?

    vous faites comment vous ?

  6. #6
    Membre actif Avatar de Steki-kun
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 222
    Points : 281
    Points
    281
    Par défaut
    moi perso je ne les utilise jamais, toujours des pointeurs.
    Mais bon c'est vraiment un choix, ca n'a rien de général, et puis c'est toujours bien de savoir que les deux existent.
    I'm the kind of guy that until it happens, I won't worry about it. - R.H. RoY05, MVP06

  7. #7
    Fry
    Fry est déconnecté
    Membre régulier Avatar de Fry
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 150
    Points : 119
    Points
    119
    Par défaut
    les reference c pour les alias (meme adresse et nom different?)
    un pointeur c une adresse memoire enfin j crois...

  8. #8
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 55
    Points : 54
    Points
    54
    Par défaut
    si les compilo mettaient un warning sur les opérations mathématiques sur les pointeurs, on les trouverait déja moins repoussants

  9. #9
    Membre actif Avatar de Steki-kun
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 222
    Points : 281
    Points
    281
    Par défaut
    si les compilo mettaient un warning sur les opérations mathématiques sur les pointeurs, on les trouverait déja moins repoussants
    C'est pas repoussant, j'en fais tout le temps
    I'm the kind of guy that until it happens, I won't worry about it. - R.H. RoY05, MVP06

  10. #10
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 749
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 749
    Points : 10 666
    Points
    10 666
    Billets dans le blog
    3
    Par défaut
    Les références remplacent avantageseument les pointeurs dans certains cas:
    - modifier / renvoyer une valeur en paramètre
    - accéler l'appel de fonction en passant ses paramètres par référence(éviter une recopie d'objet)
    Un cas typique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void test( std::string s );
    s est passée par recopie, ce qui est inutile. Changer pour un pointeur implique de modifier le code, s'assurer que le pointeur n'est pas nul, ...
    Les références résolvent le problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void test( const std::string & s );
    Quand il te faut utiliser un pointeur, tu peux utiliser un pointeur intelligent.

  11. #11
    Membre actif Avatar de Steki-kun
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 222
    Points : 281
    Points
    281
    Par défaut
    Citation Envoyé par Aurelien.Regat-Barrel
    Les références résolvent le problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void test( const std::string & s );
    en fait tiens c vrai, c'est le seul cas où je les utilise, quand j'ai la flemme de changer le code en pointeurs
    I'm the kind of guy that until it happens, I won't worry about it. - R.H. RoY05, MVP06

  12. #12
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 55
    Points : 54
    Points
    54
    Par défaut
    - modifier / renvoyer une valeur en paramètre
    et avec un pointeur ca marche pas ?

    - accéler l'appel de fonction en passant ses paramètres par référence(éviter une recopie d'objet)
    ah, parce qu'en passant un pointeur ca recopie l'objet ?

    qu'est ce que tu penses de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void test( std::string * s );
    je pense que tu voulais parler du cas particulier où tu refuse à la fonction de modifier le paramètres - ok -, mais il faut être clair car là c'est pas du tout pertinant tes arguments

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 68
    Points : 52
    Points
    52
    Par défaut
    L'avantage d'une réféernce c'est qu'elle se manipule comme l'objet lui même, alors que le pointeur demande une sémantique particulière pour accéder à celui-ci. Dans l'exemple de ta fonction, voici quelques syntaxes assez fastidieuses imposées pour l'utilisation d'un pointeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void test(const std::string * s )
    {
         // Utiliser l'opérateur d'indexation
        char c = (*s)[3];
     
         // Utiliser des opérateurs d'entrée-sortie
         cout << (*s) << endl;
    }
    Une référence permet de manipuler directement l'objet, c'est plus élégant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void test(const std::string & s )
    {
         // Utiliser l'opérateur d'indexation
        char c = s[3];
     
         // Utiliser des opérateurs d'entrée-sortie
         cout << s << endl;
    }

  14. #14
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Citation Envoyé par Steki-kun
    moi perso je ne les utilise jamais, toujours des pointeurs.
    pas bien. il faut utiliser aussi peu souvent que possible les pointeurs. c'est une source importante d'erreurs (même pour un programmeur chevronné).
    les pointeurs sont hérités du C, les références permettent de se passer de pointeur pour le passage de paramètres dans les méthodes, et permettent également une écriture plus intuitive du code (on manipule l'alias comme si c'était la variable elle-même, c'est transparent).

    pointeur = chiant new/delete, si oublie ---> cata
    référence = pas simple à appréhender au début, mais après : gain de temps, moins d'erreurs



    à mon avis

  15. #15
    Membre actif Avatar de Steki-kun
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 222
    Points : 281
    Points
    281
    Par défaut
    Citation Envoyé par bigboomshakala
    Citation Envoyé par Steki-kun
    moi perso je ne les utilise jamais, toujours des pointeurs.
    pas bien. il faut utiliser aussi peu souvent que possible les pointeurs. c'est une source importante d'erreurs (même pour un programmeur chevronné).
    bon j'ai oublié de préciser que 90% du te:mps, je fais du C
    et puis je sais pas t'as surement raison, mais je fais pas d'erreurs sur mes pointeurs, c'est une question d'habitude, et j'en ferais probablement plus avec des références si je m'y mettais, alors je préfère continuer comme ça.
    I'm the kind of guy that until it happens, I won't worry about it. - R.H. RoY05, MVP06

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 68
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par Steki-kun
    et puis je sais pas t'as surement raison, mais je fais pas d'erreurs sur mes pointeurs, c'est une question d'habitude, et j'en ferais probablement plus avec des références si je m'y mettais, alors je préfère continuer comme ça.
    Le fait que TU ne fasses pas d'erreur n'est pas le problème. D'une part ça peut toujours t'arriver, d'autre part si tu travaille en équipe, il faut partir du principe que si une erreur PEUT être commise, elle le sera. C'est donc la possibilité d'erreur qui est gênante. Personnellement je suis un grand étourdi et cela m'amène à adopter une démarche très rigoureuse dans ce que je fais car c'est ma seule issue. Dans cette optique, utiliser les référence à la place de pointeurs est une chose très naturelle.

    Tu ne ferais pas plus d'erreur avec les références, tout simplement parce que tu ne le pourrais pas. Au pire tu commettrais des erreurs d'incompréhension qui feraient planter la compilation (donc sans danger).

  17. #17
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Citation Envoyé par Steki-kun
    et puis je sais pas t'as surement raison, mais je fais pas d'erreurs sur mes pointeurs, c'est une question d'habitude, et j'en ferais probablement plus avec des références si je m'y mettais, alors je préfère continuer comme ça.
    Tu désactives les exceptions ou ton code est farci de try-catch ?

    De plus comme signalé, avec les pointeurs, des sémantiques te sont alors interdites. Typiquement mettre en place une bibliothèque d'objets mathématiques sur lesquels les opérateurs mathématiques s'appliquent.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  18. #18
    Membre actif Avatar de Steki-kun
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 222
    Points : 281
    Points
    281
    Par défaut
    Citation Envoyé par Luc Hermitte
    De plus comme signalé, avec les pointeurs, des sémantiques te sont alors interdites. Typiquement mettre en place une bibliothèque d'objets mathématiques sur lesquels les opérateurs mathématiques s'appliquent.
    Hola je ne parlais que des cas où le choix existe bien entendu, je n'ai pas enlevé la touche "&" de mon clavier bien sûr et quand je dois l'utiliser je l'utilise, mais sinon ben voilà c'est peut être mal mais tant pis, ma préférence va à l'"*". Et quand je veux du code qui, une fois compilé, est prouvé sans erreur, je fais du caml
    I'm the kind of guy that until it happens, I won't worry about it. - R.H. RoY05, MVP06

  19. #19
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 55
    Points : 54
    Points
    54
    Par défaut
    pointeur = chiant new/delete, si oublie ---> cata
    encore un faux argument !! ca n'a absolument rien à voir avec le new et le delete

    personne ne m'a encore prouvé qu'on pouvait se passer des pointeurs, c'était pourtant le but de ma question

    on en revient au point de départ : pointeurs pour l'implémentation, reférences pour les interfaces, et des "*" entre les deux... c'est laid tout ca

  20. #20
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Citation Envoyé par Steki-kun
    bon j'ai oublié de préciser que 90% du temps, je fais du C
    dans ce cas, va pour les pointeurs.

Discussions similaires

  1. Différence entre Service References & Web References ?
    Par xpander dans le forum Services Web
    Réponses: 2
    Dernier message: 19/10/2011, 14h39
  2. différence entre pointeur et valeur ?
    Par cmoibal dans le forum Débuter
    Réponses: 12
    Dernier message: 24/01/2008, 13h25
  3. Différence entre référence et pointeur ?
    Par Vivian Pennel dans le forum Langage
    Réponses: 3
    Dernier message: 03/08/2007, 17h19
  4. Réponses: 3
    Dernier message: 07/05/2002, 16h06

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