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 �prouv� 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
    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

  2. #2
    Membre exp�riment� Avatar de Steki-kun
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    222
    D�tails du profil
    Informations personnelles :
    �ge : 42
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 222
    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 &.

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 74
    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 confirm�

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

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3

  5. #5
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    55
    D�tails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 55
    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 exp�riment� Avatar de Steki-kun
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    222
    D�tails du profil
    Informations personnelles :
    �ge : 42
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 222
    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.

  7. #7
    Fry
    Fry est d�connect�
    Membre confirm� 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
    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 averti
    Inscrit en
    Mai 2002
    Messages
    55
    D�tails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 55
    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 exp�riment� Avatar de Steki-kun
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    222
    D�tails du profil
    Informations personnelles :
    �ge : 42
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 222
    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

  10. #10
    Expert confirm�

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

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    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 exp�riment� Avatar de Steki-kun
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    222
    D�tails du profil
    Informations personnelles :
    �ge : 42
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 222
    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

  12. #12
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    55
    D�tails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 55
    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 averti
    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
    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 : 45
    Localisation : France, Val de Marne (�le de France)

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    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 exp�riment� Avatar de Steki-kun
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    222
    D�tails du profil
    Informations personnelles :
    �ge : 42
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 222
    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.

  16. #16
    Membre averti
    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
    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 confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    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 296
    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 exp�riment� Avatar de Steki-kun
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    222
    D�tails du profil
    Informations personnelles :
    �ge : 42
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 222
    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

  19. #19
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    55
    D�tails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 55
    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 : 45
    Localisation : France, Val de Marne (�le de France)

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    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