« Programmation C++/Les pointeurs » : différence entre les versions
Contenu supprimé Contenu ajouté
+ introduction, formulation |
|||
Ligne 1 :
{{Programmation C++}}
Une variable correspond à un emplacement en mémoire (adresse) où se trouve une valeur.
Toute variable a permettent d'accéder :
* à 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.
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.
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;''
La variable ''identificateur'' est un pointeur vers une valeur de type ''type''.
== L'opérateur & ==
Il permet d'obtenir l'adresse d'une variable, c'est à dire un pointeur vers une variable.
''&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''.
== L'opérateur * ==
''* variable''
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.
== Comparaison avec une variable classique ==
<source lang="cpp">
int a;
int* pA;
pA = &a; // l'adresse de a est stockée dans pA
</source>
{|
| é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>
La variable b vaut 108
La variable c vaut 103
* 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.
Ligne 54 ⟶ 115 :
* on affiche ensuite les valeurs de b et c c'est à dire respectivement 108 et 103.
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é.
char* ptr="Pointeur"; // ptr pointe le premier caractère de la chaîne de caractères
Ligne 72 ⟶ 133 :
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.
int premiers[] = { 2, 3, 5, 7, 11, 13, 17 };
|