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 ?
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 ?
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.
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:
Dans ce cas les références permettent une plus grande transparence (on ne voit pas d'adresse).
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;
---------------------------------------------------------------------------------------------------------
Accès a un objet créé dynamiquement:
On voit ici que l'utilisation des références n'est plus trés pratique.
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;
---------------------------------------------------------------------------------------------------------
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
<Sauf erreur de ma part>
Prenons le code suivant :
Dans la pratique, on a l'équivalence :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int i = 2; int * const pointeur = &i; int & reference = i;
La référence permet d'éviter le déréférencement, et donc apporte une meilleure lisibilité.
Code : Sélectionner tout - Visualiser dans une fenêtre à part (*pointeur) <=> reference
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 ?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager