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 :

difference entre adresse et reference


Sujet :

C++

  1. #1
    Membre éprouvé Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Points : 1 210
    Points
    1 210
    Par défaut difference entre adresse et reference
    voila je débute en c++ et j'aurais aimé savoir s'il y'avait une différence majeur entre les adresses et les references ?

    Et si differences il y a, quelles sont-elles ?

  2. #2
    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
    Par défaut
    Références:
    http://c.developpez.com/faq/cpp/?pag...TION_reference
    et puis un exemple d'adresse toute simple:
    http://c.developpez.com/faq/c/?page=pointeurs

    En fait les références c'est des objets contrairement aux adresses qui elles pointent sur des zones mémoires.

    J'espère avoir répondu à ta question.

  3. #3
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    Les notions d'adresse de pointeur et de référence sont trés liées.

    L'adresse d'un objet, est un nombre qui corespond à sa position en mémoire.

    Les pointeurs et les références sur objet sont des moyens d'accéder directement à un objet, c'est à dire en ne travaillant pas sur une copie mais sur l'objet lui même. Il utilise tout les deux la notion d'adresse, puisqu'il doivent connaitre l'adresse de l'objet pour pouvoir travailler dessus.

    La question à laquelle je répondrais donc est plutôt "quelle est la diférence entre un pointeur et une référence".
    En fait il y a peu de différence. Seule la syntaxe change.

    -----------------------------------------------------------------------------------------------------
    Accès a un objet créé statiquement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    //Un objet de type entier dont la valeur est 0. On ne connait pas son adresse, c'est le compilateur qui s'en occupe
    int i = 0;          
     //On déclare un pointeur sur un objet de type entier. On initialise ce pointeur avec l'adresse de l'objet en question. Ainsi, il sera une autre manière d'accéder à i, c'est un lien.
    int * p_i = &i;
    //Enfin on déclare une référence sur un objet de type entier. On initialise cette référence avec l'objet lui même, c'est le compilateur qui s'occupe de trouver sont adresse. Ainsi, r_i sera une troisième façon d'accéder à i.
    int & r_i = i;
     
    //Pour accéder à la valeur:
    i;
    *p_i;
    r_i;
    Dans ce cas les références permettent une plus grande transparence (on ne voit pas d'adresse).
    ---------------------------------------------------------------------------------------------------------
    Accès a un objet créé dynamiquement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //Création d'un pointeur vers un objet crée dynamiquement.
    int * p_i = new i;
    //Création d'une référence sur l'objet créé dynamiquement
    int & r_i = *(new i);
     
    //Libération de la mémoire
    delete p_i;
    delete &r_i;
    On voit ici que l'utilisation des références n'est plus trés pratique.
    ---------------------------------------------------------------------------------------------------------

    Enfin ne pas confondre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //Référence sur un objet de type entier
    int & i ...;
    //Adresse de l'objet i
    ... &i;
    ---------------------------------------------------------------------------------------------------------

    Ce n'est pas une notion facile à assimiler. C'est pourquoi j'ai aussi répondu à ta question, tu auras deux explications pour le prix d'une. Et peut être d'ailleurs que je n'ai pas tout compris moi même

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 161
    Points
    161
    Par défaut
    <Sauf erreur de ma part>

    Prenons le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int i = 2;
    int * const pointeur = &i;
    int & reference = i;
    Dans la pratique, on a l'équivalence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (*pointeur)   <=>   reference
    La référence permet d'éviter le déréférencement, et donc apporte une meilleure lisibilité.

  5. #5
    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
    Je pense que dans ce dernier cas, un compilateur intelligent ne rajoutera pas d'adresse intermédiaire, mais utilisera "reference" comme s'il s'était agit de "i" directement.

    Une référence est avant tout un alias : un autre nom pour un objet existant. Suivant les situations, elles pourront ou non être implémentées comme si on avait eu des pointeurs en interne. La FAQ ne suffisait pas ?
    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...

Discussions similaires

  1. Différences entre Delphi et Visual Basic ?
    Par Anonymous dans le forum Débats sur le développement - Le Best Of
    Réponses: 75
    Dernier message: 30/03/2009, 20h09
  2. [C#] References : difference entre net et com
    Par cedgov dans le forum Windows Forms
    Réponses: 2
    Dernier message: 08/11/2004, 11h55
  3. Difference entre fenetre et boite de dialog
    Par billyboy dans le forum Windows
    Réponses: 2
    Dernier message: 02/06/2003, 15h43
  4. [] Difference entre MSHFlexGrid et MSFlexGrid
    Par olivierx dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 23/04/2003, 08h48
  5. Difference entre types d'Adresse IP
    Par freud dans le forum Développement
    Réponses: 3
    Dernier message: 02/03/2003, 02h06

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