Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Langue C

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 :

Comprendre les pointeurs en C++ : Guide pratique complet

Langue C

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