Différence entre pointeur et référence

Différence entre pointeur et référence

Les pointeurs et les références sont les caractéristiques les plus puissantes de C et C ++ qui permettent aux programmeurs de manipuler directement l'adresse mémoire pour une gestion efficace de la mémoire.

Les deux sont des variables qui sont utilisées pour désigner indirectement les autres objets et ils 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 comme un pointeur qui peut être utilisé pour se référer indirectement à une autre variable.

La plupart des programmeurs semblent développer une certaine compréhension de savoir quand utiliser les pointeurs et quand utiliser des références, mais ils rencontrent souvent des problèmes dont la solution semble claire.

Donc, pour mieux comprendre la philosophie, comprenons la différence entre les deux.

Qu'est-ce qu'un pointeur?

Chaque variable est un emplacement de mémoire défini par son adresse et est associé à un identifiant qui contient une valeur qui peut être modifiée au cours d'un programme. En termes simples, la 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 est appelé une variable de pointeur.

L'idée est d'utiliser des identifiants (ou des noms) au lieu d'adresses numériques pour faciliter le fardeau de la programmation, réduisant ainsi la complexité des programmes. Étant donné que ces adresses se réfèrent à des emplacements réels dans la mémoire de l'ordinateur, les pointeurs peuvent être utilisés pour accéder et manipuler le contenu stocké dans la mémoire.

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 qui appartiennent à un type de données distinct, ils doivent être déclarés utiliser des pointeurs avant de pouvoir travailler avec eux. La forme générale d'une déclaration de pointeur est:

Data_type * var-name;

Ici, «data_type» est le type de base du pointeur et «var-name» est la variable du pointeur. L'astérisque (*) ici est utilisé pour déclarer le pointeur qui désigne la variable «var-name» comme variable de pointeur.

int * p; // pointeur entier

float * x; // Pointeur flottant

Ici, la variable «P» pointe vers un type de données entier qui est déclaré «int» qui fait référence au type de données de la variable. De même, dans le deuxième exemple, «Float» fait référence au type de données de la variable «X» qui est en fait désignée comme un pointeur vers une variable à virgule flottante.

Qu'est-ce qu'une référence?

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 deuxième 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 il a la même adresse que la variable d'origine. Il prend en charge le pas par référence en tant que paramètres formels de fonction et une fois qu'il est défini pour se référer à une variable, il ne peut pas être répertorié, ce qui signifie qu'il ne peut pas être renvoyé à une autre variable.

Contrairement aux pointeurs, ils n'ont pas besoin d'opérateur de déréférence 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» comme un objet de type «référence à int». Une référence peut être facilement confondue avec un pointeur qui est une variable indépendante, dont les valeurs d'adresse ne peuvent pas être réaffectées une fois créé.

Différence entre pointeur et référence

  1. Bases du pointeur et référence

- Les deux offrent des capacités presque similaires en termes de convivialité et la distinction peut être délicate. Un pointeur n'est qu'une variable qui stocke l'adresse mémoire d'une autre variable, tandis qu'une référence est comme un alias pour une variable déjà existante. Il crée un deuxième nom pour une variable qui peut être utilisée pour modifier le contenu stocké dans cette variable.

  1. Déclaration de pointeur et référence

- Un pointeur est comme toute autre variable qui stocke un morceau de données. Contrairement à d'autres variables, les variables du pointeur stockent les adresses de mémoire au lieu des valeurs. Un pointeur est déréférencé à l'aide de l'opérateur d'indirection * pour accéder à l'emplacement de la mémoire de la variable qu'il pointe vers. Une référence, en revanche, n'a pas besoin d'un opérateur de déréférence pour accéder à la valeur.

  1. Réaffectation du pointeur et référence

- Contrairement aux pointeurs qui peuvent être initialisés à tout moment, les références doivent être attribuées à l'initialisation. Les pointeurs sont accessibles directement, tandis que les références ne peuvent pas être directement accessibles.

  1. Adresse mémoire pour pointeur et référence

- 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 du pointeur a la même adresse où elle est enregistrée en mémoire. Une variable de référence, en revanche, est un alias pour une autre variable, prenant ainsi l'adresse de la variable de référence.

  1. Valeur nulle pour le pointeur et référence

- NULL représente la fin de la liste, ce qui signifie qu'il indique que la valeur est inconnue et qu'il spécifie que la variable n'a pas d'espace d'adressage valide. La valeur nul peut être attribuée directement à une variable de pointeur qui suggère qu'elle ne pointe nulle part, alors que Null ne peut être affecté à une variable de référence.

Pointeur vs. Référence: graphique de comparaison

Résumé du pointeur vs. Référence

Les pointeurs ont toujours été parmi les sujets préférés de la discussion des programmeurs C / C ++ jusqu'à ce que les références arrivent sur la photo. Les références sont quelque peu similaires aux pointeurs mais ont leur juste part des avantages et des inconvénients en comparaison. Bien que les deux puissent être utilisés pour changer les variables locales d'une fonction dans une autre fonction, ils ont leurs différences. Les deux sont des fonctionnalités puissantes en C et C ++ qui vous permettent de manipuler directement la mémoire, mais à 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.