Les pointeurs et les références sont les fonctionnalités les plus puissantes de C et C ++ qui permettent aux programmeurs de manipuler directement l'adresse de mémoire pour une gestion efficace de la mémoire..
Les deux sont des variables qui sont utilisées pour faire indirectement référence à d'autres objets et partagent certaines caractéristiques communes à la surface. Bien qu'ils partagent de nombreuses capacités communes, ils sont également très complexes à comprendre.
Un pointeur est une variable qui contient l'adresse mémoire d'une autre variable, tandis qu'une référence est semblable à un pointeur qui peut être utilisé pour renvoyer indirectement à une autre variable..
La plupart des programmeurs semblent bien comprendre quand utiliser des pointeurs et quand utiliser des références, mais ils rencontrent souvent des problèmes dont la solution ne semble pas claire..
Donc, pour mieux comprendre la philosophie, comprenons la différence entre les deux.
Chaque variable est un emplacement mémoire défini par son adresse et associé à un identifiant contenant une valeur pouvant être modifiée au cours d'un programme. En termes simples, variable est un symbole qui représente une quantité.
Un pointeur est une variable qui contient l'adresse mémoire d'une autre variable. Un pointeur n'est rien d'autre qu'une adresse et une variable qui stocke un pointeur s'appelle une variable de pointeur.
L'idée est d'utiliser des identificateurs (ou des noms) au lieu d'adresses numériques pour alléger la charge de la programmation, réduisant ainsi la complexité des programmes. Puisque ces adresses font référence à des emplacements réels dans la mémoire de l'ordinateur, des pointeurs peuvent être utilisés pour accéder au contenu stocké dans la mémoire et le manipuler..
Comme toute variable ou constante, les pointeurs doivent être déclarés pour leurs types. Étant donné que les pointeurs contiennent des adresses de mémoire appartenant à un type de données distinct, ils doivent être déclarés à l'aide de pointeurs avant de pouvoir les utiliser. La forme générale d'une déclaration de pointeur est la suivante:
Type_données * nom_variable;
Ici, “Data_type” est le type de base du pointeur et “var-name” est la variable du pointeur. L'astérisque (*) sert ici à déclarer le pointeur qui désigne la variable "nom-var" en tant que variable de pointeur.
int * p; // pointeur entier
float * x; // point flottant
Ici, la variable "p" pointe vers un type de données entier qui est déclaré comme "int" et qui fait référence au type de données de la variable. De même, dans le deuxième exemple, «float» désigne le type de données de la variable «x», désignée en fait comme un pointeur sur une variable à virgule flottante..
Une référence est comme un pointeur avec un accès indirect à une variable. C'est comme un alias pour une autre variable, ce qui signifie que c'est juste un autre nom pour une variable déjà existante.
Il permet aux programmeurs de créer un second nom pour la variable, qu'ils peuvent utiliser pour manipuler le contenu stocké dans cette variable. C'est une entité qui est un alias pour une autre variable et qui a la même adresse que la variable d'origine. Il prend en charge le passage par référence agissant en tant que paramètres formels de fonctions et une fois défini pour faire référence à une variable, il ne peut pas être replacé, ce qui signifie qu'il ne peut pas être référé à une autre variable..
Contrairement aux pointeurs, ils n'ont pas besoin d'un opérateur de déréférencement pour accéder à la valeur. en fait, ils peuvent être utilisés comme des variables normales.
int i;
int & ri = i;
Ici, «ri» est une référence entière initialisée à «i». Il déclare «ri» en tant qu'objet de type «référence à int». Une référence peut facilement être confondue avec un pointeur qui est une variable indépendante dont les valeurs d'adresse ne peuvent plus être réaffectées une fois créées..
- Les deux offrent des capacités presque similaires en termes de convivialité et la distinction peut être délicate. Un pointeur est simplement une variable qui stocke l'adresse mémoire d'une autre variable, alors qu'une référence ressemble à un alias pour une variable déjà existante. Il crée un second nom pour une variable qui peut être utilisé pour modifier le contenu stocké dans cette variable..
- Un pointeur est comme toute autre variable qui stocke une donnée. Contrairement aux autres variables, les variables de pointeur stockent des adresses de mémoire au lieu de valeurs. Un pointeur est déréférencé à l'aide de l'opérateur d'indirection * pour accéder à l'emplacement mémoire de la variable vers laquelle il pointe. En revanche, une référence n’a besoin d’aucun opérateur de déréférencement pour accéder à la valeur..
- Contrairement aux pointeurs qui peuvent être initialisés à tout moment, les références doivent être attribuées lors de l'initialisation. Les pointeurs sont accessibles directement, alors que les références ne sont pas directement accessibles.
- Une variable de pointeur a son propre emplacement en mémoire, ce qui signifie que lorsque vous déclarez un pointeur, vous spécifiez un emplacement qui est une adresse mémoire attribuée à chaque unité de mémoire. La variable de pointeur a la même adresse où elle est enregistrée en mémoire. D'autre part, une variable de référence est un alias pour une autre variable, prenant ainsi l'adresse de la variable de référence..
- NULL représente la fin de la liste, ce qui signifie qu'il indique que la valeur est inconnue et que la variable n'a pas d'espace d'adressage valide. La valeur NULL peut être assignée directement à une variable de pointeur, ce qui suggère qu'elle ne pointe nulle part, alors que NULL ne peut pas être assigné à une variable de référence.
Les pointeurs ont toujours fait partie des sujets de discussion préférés des programmeurs C / C ++ jusqu'à ce que des références apparaissent. Les références sont quelque peu similaires aux pointeurs, mais ont leur juste part d'avantages et d'inconvénients en comparaison. Bien que les deux puissent être utilisés pour modifier les variables locales d'une fonction dans une autre fonction, ils ont leurs différences. Ce sont deux fonctionnalités puissantes en C et C ++ qui vous permettent de manipuler directement la mémoire, à quelques exceptions près. Un pointeur contient l'adresse mémoire d'une variable, alors qu'une référence n'est qu'un alias pour une autre variable..