- Introduction
- Qu'est-ce qu'un pointeur?
- Déclaration et initialisation des pointeurs
- Accéder à la valeur pointée
- Exemples de programmation
- Exercices
- Références
Les pointeurs sont l'une des caractéristiques les plus puissantes et distinctives du langage C++. Ils permettent aux programmeurs de manipuler directement la mémoire de l'ordinateur, ce qui peut améliorer considérablement les performances des programmes et faciliter la gestion de structures de données complexes. Cependant, les pointeurs peuvent également être source d'erreurs et de bogues difficiles à détecter, il est donc important de bien comprendre comment ils fonctionnent et de les utiliser avec prudence.
Un pointeur est une variable qui stocke l'adresse mémoire d'une autre variable. En d'autres termes, un pointeur "pointe" vers l'emplacement où une autre variable est stockée en mémoire. Les pointeurs sont souvent utilisés pour accéder à des variables et des objets de manière indirecte, ce qui peut faciliter le passage d'informations entre les fonctions et la manipulation de structures de données.
Le pointeur a pointe sur la variable b. On peut noter que b contient un nombre (en hexadécimal 00000011 = en décimal 17), et que a contient l'adresse de b en mémoire (en hexadécimal 1008). Dans ce cas précis, l'adresse et la donnée sont contenues dans 32 bits. |
En C++, un pointeur est déclaré en utilisant le symbole *
après le type de la variable pointée. Par exemple, pour déclarer un pointeur vers un entier, on utiliserait la syntaxe suivante :
int* myPointer;
Lorsqu'un pointeur est déclaré, il est important de l'initialiser avant de l'utiliser. Un pointeur non initialisé peut provoquer des comportements indéterminés et des erreurs difficiles à détecter. Pour initialiser un pointeur, on peut lui attribuer l'adresse d'une autre variable en utilisant l'opérateur &
:
int myVariable = 42;
int* myPointer = &myVariable;
Pour accéder à la valeur de la variable pointée par un pointeur, on utilise l'opérateur de déréférencement *
. Cela permet de lire ou de modifier la valeur de la variable pointée:
int myVariable = 42;
int* myPointer = &myVariable;
int value = *myPointer; // value contient maintenant 42
*myPointer = 13; // myVariable contient maintenant 13
Voici quelques exemples de code utilisant des pointeurs:
- Échange de valeurs entre deux variables en utilisant un pointeur:
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int x = 5;
int y = 10;
swap(&x, &y); // x = 10, y = 5
}
- Manipulation d'un tableau en utilisant des pointeurs:
int sum(int* arr, int size) {
int total = 0;
for (int i = 0; i < size; ++i) {
// On peut accéder à l'élément d'indice i du tableau en utilisant
// l'opérateur de déréférencement * et en ajoutant i à l'adresse
// du premier élément du tableau
total += *(arr + i);
}
return total;
}
int main() {
int numbers[] = {1, 2, 3, 4, 5};
int result = sum(numbers, 5); // result = 15
}
Note : Dans un système de 64 bits, les pointeurs ont une taille de 64 bits, soit 8 octets. Lorsque vous travaillez avec un tableau d'entiers, chaque élément occupe généralement 4 octets. Ainsi, lorsque vous ajoutez 1 à un pointeur vers un tableau d'entiers, il pointe vers l'élément suivant du tableau, qui se trouve 4 octets plus loin en mémoire.
Si l'adresse du tableau
arr
est0x7ffddc0c0a10
, alorsarr + 1
vaudra0x7ffddc0c0a10 + 4 = 0x7ffddc0c0a14
. Pour accéder à la valeur de cet élément, il faut déréférencer le pointeur en utilisant l'opérateur*
:*(arr + 1)
.Donc,
*(arr + 1)
représente la valeur de l'élément à l'adresse mémoire0x7ffddc0c0a14
.
- Vous pouvez faire les exercices en lien avec les pointeurs sur cette page.