Comprendre les pointeurs en C++ : Guide pratique complet
Les pointeurs en C++
Ce tutoriel explique les pointeurs C++, leur mécanique et des exemples pratiques pour maîtriser cette fonctionnalité essentielle du langage.
En C++, un pointeur est une variable qui contient l'adresse mémoire d'une autre variable. Les pointeurs permettent la manipulation directe de la mémoire, l'allocation dynamique et la gestion efficace des données.
Adresse en C++
Donnée une variable var, l'expression &var retourne son adresse en mémoire. Par exemple :
Exemple 1 : Affichage des adresses de variables en C++
#include <iostream>
using namespace std;
int main() {
// déclaration des variables
int var1 = 3;
int var2 = 24;
int var3 = 17;
// affichage de l'adresse de var1
cout << "Adresse de var1 : " << &var1 << endl;
// affichage de l'adresse de var2
cout << "Adresse de var2 : " << &var2 << endl;
// affichage de l'adresse de var3
cout << "Adresse de var3 : " << &var3 << endl;
}
Sortie
Adresse de var1: 0x7fff5fbff8ac Adresse de var2: 0x7fff5fbff8a8 Adresse de var3: 0x7fff5fbff8a4
Les adresses sont affichées en format hexadécimal. La différence de 4 octets entre les adresses consécutives reflète la taille de 4 octets d'un int sur un système 64 bits.
Note : Les adresses exactes peuvent varier à chaque exécution du programme.
Pointeurs en C++
Comme montré, les pointeurs stockent des adresses plutôt que des valeurs directes. La déclaration d'un pointeur est simple :
int *pointVar;
Ici, pointVar est un pointeur vers un int. La syntaxe préférée place l'astérisque à côté du type :
int* pointVar; // syntaxe préférée
Les déclarations multiples sont aussi possibles :
int* pointVar, p;
Dans cette ligne, pointVar est un pointeur, tandis que p est un int régulier. L'astérisque s'associe au nom de la variable, pas au type.
Astuce : L'opérateur * est utilisé pour déclarer des pointeurs, pas pour effectuer une multiplication.
Assignation d'adresses aux pointeurs
Pour lier un pointeur à l'adresse d'une variable, utilisez l'opérateur d'adresse & :
int* pointVar, var;
var = 5;
// assigner l'adresse de var à pointVar
pointVar = &var;
Maintenant pointVar contient l'adresse mémoire de var.
Obtention de la valeur depuis l'adresse en utilisant les pointeurs
L'opérateur de déréférencement * récupère la valeur stockée à l'adresse qu'un pointeur contient :
int* pointVar, var;
var = 5;
pointVar = &var;
cout << *pointVar << endl; // Sortie : 5
Ici, *pointVar donne la valeur de var (5). L'opérateur est appelé opérateur de déréférencement.
Note : En C++, pointVar (le pointeur) et *pointVar (la valeur vers laquelle il pointe) sont des entités distinctes.
Exemple 2 : Fonctionnement des pointeurs C++
#include <iostream>
using namespace std;
int main() {
int var = 5;
// déclaration de la variable pointeur
int* pointVar;
// stockage de l'adresse de var
pointVar = &var;
// affichage de la valeur de var
cout << "var = " << var << endl;
// affichage de l'adresse de var
cout << "Adresse de var (&var) = " << &var << endl << endl;
// affichage du pointeur pointVar
cout << "pointVar = " << pointVar << endl;
// affichage du contenu de l'adresse pointée par pointVar
cout << "Contenu de l'adresse pointée par pointVar (*pointVar) = " << *pointVar << endl;
return 0;
}
Sortie
var = 5 Adresse de var (&var) = 0x61ff08 pointVar = 0x61ff08 Contenu de l'adresse pointée par pointVar (*pointVar) = 5
Modification de la valeur pointée par les pointeurs
Si pointVar pointe vers var, la modification de *pointVar change la variable originale :
int var = 5;
int* pointVar;
pointVar = &var;
*pointVar = 1;
cout << var << endl; // Sortie : 1
À la fois pointVar et &var contiennent la même adresse ; la modification de la valeur déréférencée met à jour var.
Exemple 3 : Modification de la valeur pointée par les pointeurs
#include <iostream>
using namespace std;
int main() {
int var = 5;
int* pointVar;
// stockage de l'adresse de var
pointVar = &var;
// affichage de var
cout << "var = " << var << endl;
// affichage de *pointVar
cout << "*pointVar = " << *pointVar << endl << endl;
cout << "Changement de la valeur de var à 7 :" << endl;
// changement de la valeur de var à 7
var = 7;
// affichage de var
cout << "var = " << var << endl;
// affichage de *pointVar
cout << "*pointVar = " << *pointVar << endl << endl;
cout << "Changement de la valeur de *pointVar à 16 :" << endl;
// changement de la valeur de var à 16
*pointVar = 16;
// affichage de var
cout << "var = " << var << endl;
// affichage de *pointVar
cout << "*pointVar = " << *pointVar << endl;
return 0;
}
Sortie
var = 5 *pointVar = 5 Changing value of var to 7: var = 7 *pointVar = 7 Changing value of *pointVar to 16: var = 16 *pointVar = 16
Erreurs courantes lors du travail avec les pointeurs
Voici les erreurs typiques et la façon correcte de gérer les pointeurs :
int var, *varPoint;
// Faux ! varPoint est une adresse mais var ne l'est pas
varPoint = var;
// Faux !
// &var est une adresse
// *varPoint est la valeur stockée dans &var
*varPoint = &var;
// Correct !
// varPoint est une adresse et &var aussi
varPoint = &var;
// Correct !
// both *varPoint and var sont des valeurs
*varPoint = var;
Lectures recommandées :
- Comment utiliser les pointeurs de type générique avec un pointeur void ?
- Comment représenter un tableau à l'aide d'un pointeur ?
- Comment utiliser les pointeurs avec les fonctions ?
- Comment utiliser les pointeurs avec les structures ?

Langue C
- Comprendre les types de données C++ : Fondamentaux, modificateurs et bonnes pratiques
- Maîtriser les opérateurs C++ : Guide complet avec exemples pratiques
- Commentaires C++ : Bonnes pratiques pour un code lisible et maintenable
- Maîtriser les templates de classe en C++ : Guide pratique
- Maîtriser les pointeurs en C : Tutoriel pratique guidé par des experts
- Maîtriser les pointeurs en C++ : Concepts, exemples et applications pratiques
- Maîtriser les pointeurs en C : Étapes pratiques vers la programmation avancée
- Langage C++ : Vue d'ensemble et caractéristiques clés
- Constantes et littéraux en C++ : Types, syntaxe et bonnes pratiques