« Programmation C++/Les pointeurs » : différence entre les versions

+ introduction, formulation
(+ introduction, formulation)
{{Programmation C++}}
== Les pointeurs ==
Un pointeur désigne une variable contenant une adresse mémoire. Il est utilisé lorsque l'on veut manipuler les données stockées à cette adresse. C'est donc un moyen indirect de construire et de manipuler des données très souvent complexes.
==== Déclaration ====
''type * identificateur;''<br/>
La variable ''identificateur'' est un pointeur vers une variable de type ''type''.
 
==== L'opérateurIntroduction & ====
Une variable correspond à un emplacement en mémoire (adresse) où se trouve une valeur.
Il permet d'obtenir un pointeur vers une variable.<br/>
Toute variable a permettent d'accéder :
''&identificateur'' permet d'obtenir un pointeur vers la variable ''identificateur''. Il renvoit en réalité une adresse mémoire, l'adresse où est stockée physiquement la variable ''identificateur''. C'est donc une variable pointeur.
* à sa valeur en lecture et en écriture :
<source lang="cpp">
int a;
a = 10; // écriture de la valeur de a
cout << "A vaut " << a ; // lecture de la valeur de a
</source>
* à son adresse en lecture seulement car l'adresse (l'emplacement mémoire) est choisi par le système :
<source lang="cpp">
cout << "L'adresse de A est " << &a ; // lecture de l'adresse de a
</source>
 
Un pointeur désigne un type particulier de variable dont la valeur est une adresse.
==== L'opérateur * ====
Un pointeur permet donc de contourner la restriction sur le choix de l'adresse d'une variable, et permet essentiellement d'utiliser la mémoire allouée dynamiquement.
''* variable''<br\>
C'est l'opérateur de déréférencement. Il permet d'obtenir et donc de manipuler les données pointées par la variable ''variable''. Ainsi
''*pointeur'' permet d'obtenir la variable pointée par ''pointeur''.
 
Il est utilisé lorsque l'on veut manipuler les données stockées à cette adresse.
==== Exemple de programme ====
C'est donc un moyen indirect de construire et de manipuler des données très souvent complexes.
 
== Déclaration ==
#include <iostream>
''type * identificateur;''
using namespace std;
La variable ''identificateur'' est un pointeur vers une valeur de type ''type''.
 
int main()
== L'opérateur & ==
{
Il permet d'obtenir l'adresse d'une variable, c'est à dire un pointeur vers une variable.
int a, b, c;
''&identificateur'' // permet d'obtenir un pointeur vers la variable ''identificateur''
int *x, *y;
Il renvoit en réalité une adresse mémoire, l'adresse où est stockée physiquement la variable ''identificateur''.
 
a = 98;
== L'opérateur * ==
''* variable''
x = &a;
C'est l'opérateur de déréférencement. Il permet d'obtenir et donc de manipuler les données pointées par la variable ''variable''. Ainsi <tt>''*pointeur''</tt> permet d'accéder à la valeur pointée par ''pointeur'' en lecture et en écriture.
c = *x + 5;
 
== Comparaison avec une variable classique ==
y = &b;
 
*y = a + 10;
<source lang="cpp">
int a;
cout << "La variable b vaut : " << b << endl;
int* pA;
cout << "La variable c vaut : " << c << endl;
pA = &a; // l'adresse de a est stockée dans pA
</source>
return 0;
 
}
{|
| écriture de la valeur de a
|
<source lang="cpp">
a = 10;
</source>
|
<source lang="cpp">
*pA = 10;
</source>
|-
| lecture de la valeur de a
|
<source lang="cpp">
cout << "A vaut " << a ;
</source>
|
<source lang="cpp">
cout << "A vaut " << *pA ;
</source>
|-
| lecture de l'adresse de a
|
<source lang="cpp">
cout << "L'adresse de A est " << &a ;
</source>
|
<source lang="cpp">
cout << "L'adresse de A est " << pA ;
</source>
|}
 
Le pointeur <tt>pA</tt> peut par la suite pointer l'adresse d'une autre variable, où bien pointée l'adresse d'un bloc de mémoire alloué dynamiquement.
 
== Exemple de programme ==
 
<source lang="cpp">
#include <iostream>
using namespace std;
 
int main()
{
int a, b, c;
int *x, *y;
 
a = 98;
x = &a;
c = *x + 5;
y = &b;
*y = a + 10;
 
cout << "La variable b vaut : " << b << endl;
cout << "La variable c vaut : " << c << endl;
 
return 0;
}
</source>
 
'''=== Exécution :'''<br/>===
La variable b vaut 108<br/>
La variable c vaut 103<br/>
 
'''=== Explications : ''' ===
* Dans ce programme, on déclare 3 variables a, b et c. On déclare ensuite 2 pointeurs vers des entiers x et y.
* a est initialisé à 98.
* on affiche ensuite les valeurs de b et c c'est à dire respectivement 108 et 103.
 
=== Opérations arithmétiques sur les pointeurs ===
 
Hormis l'opérateur de déréférencement, les pointeurs peuvent être utilisés avec l'opérateur d'addition ( ''+'' ). L'addition d'un pointeur avec une valeur entière permet d'avancer ou reculer le pointeur du nombre d'éléments indiqué.
 
==== Exemple 1 ====
 
char* ptr="Pointeur"; // ptr pointe le premier caractère de la chaîne de caractères
Comme l'exemple précédent le montre, il est également possible d'utiliser les opérateurs d'incrémentation et de décrémentation.
 
==== Exemple 2 ====
 
int premiers[] = { 2, 3, 5, 7, 11, 13, 17 };