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 ?
Version imprimable
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:
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:
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:
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:
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:(*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 ?