Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Comment Les Références Diffèrent-Elles Des Pointeurs ? | Références
Pointeurs Intelligents C++
course content

Contenu du cours

Pointeurs Intelligents C++

Pointeurs Intelligents C++

1. Introduction aux Pointeurs Intelligents
2. Pointeurs Uniques
3. Pointeurs Partagés
4. Pointeurs Faibles
5. Références
6. Sujets Avancés

book
Comment Les Références Diffèrent-Elles Des Pointeurs ?

Comprendre les références

Dans la première section, nous avons vu que les références sont des alias pour des variables existantes. Leur principale fonction est de fournir une syntaxe alternative pour accéder à la valeur d'un objet. Si nous regardons sous le capot, l'adresse mémoire d'une référence est la même que l'adresse mémoire de l'objet référencé.

cpp

main

copy
1234567891011121314
#include <iostream> int main() { int num = 42; int& refNum = num; // Output memory addresses std::cout << "Address of num: " << &num << std::endl; std::cout << "Address of refNum: " << &refNum << std::endl; // Output values std::cout << "Value of num: " << num << std::endl; std::cout << "Value of refNum: " << refNum << std::endl; }

Si vous exécutez le code ci-dessus, vous verrez que la variable num et la référence refNum auront les mêmes valeurs et les mêmes adresses mémoire.

Une référence est essentiellement un pointeur constant

Une autre façon de le voir est qu'une référence est essentiellement un pointeur constant. Un pointeur constant est un pointeur qui ne peut pas être réassigné à un objet dynamique différent après l'initialisation. Cependant, un pointeur constant doit être déréférencé pour obtenir la valeur de l'objet dynamique. Avec les références, vous n'avez pas besoin de déréférencer car vous pouvez accéder directement à la valeur. Considérons un exemple pour plus de clarté :

cpp

main

copy
1234567891011121314151617181920
#include <iostream> int main() { // Example with a reference int num1 = 42; int& refNum = num1; // Example with a constant pointer int num2 = 73; int* const ptrNum = &num2; // Attempting to reassign the reference or constant pointer will result in a compilation error // refNum = num2; // Uncommenting this line will just set num1 value to num2 value // ptrNum = &num1; // Uncommenting this line will cause a compilation error // Output values directly through reference and with dereferencing constant pointer std::cout << "Value of num1 through refNum: " << refNum << std::endl; std::cout << "Value of num2 through ptrNum: " << *ptrNum << std::endl; }

Dans le code ci-dessus, nous démontrons plusieurs choses. Tout d'abord, nous créons un pointeur constant et une référence. Ensuite, nous montrons qu'aucun d'eux ne peut être réassigné. Enfin, nous imprimons leurs valeurs : Pour le pointeur constant, nous devons utiliser * pour le déréférencement, mais la référence peut être accédée directement. Jouez avec le code pour en apprendre davantage, tout en suivant les commentaires !

Différence
Pointeur
Référence
Affectation à NULLPeut être affecté à NULLNe peut pas être affecté à NULL
Adresse en mémoireA sa propre adresse en mémoireN'a pas sa propre adresse en mémoire
InitialisationPeut être laissé non initialiséDoit être initialisé ou provoque une erreur de compilation
Pointeur vers un autre pointeurPossiblePas possible
Création de tableauUn tableau de pointeurs peut être crééUn tableau de références ne peut pas être créé
Accès aux membres de classe/structUtilisez -> pour accéder aux membresUtilisez . pour accéder aux membres
Quelle adresse les références occupent-elles en mémoire ?

Quelle adresse les références occupent-elles en mémoire ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 5. Chapitre 1
We're sorry to hear that something went wrong. What happened?
some-alt