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

Contenu supprimé Contenu ajouté
échange titre "Pointeur constant" <-> "Pointeur vers une valeur constante"
Tavernierbot (discussion | contributions)
m Bot: Retouches cosmétiques
Ligne 1 :
{{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érateur & ====
Il permet d'obtenir un pointeur vers une variable.<br/>
''&identificateur'' permet d'obtenir un pointeur vers la variable ''identificateur''. Il renvoit en réalité une adresse mémoire, l'adresse où est stocké physiquement la variable ''identificateur''. C'est donc une variable pointeur.
 
==== L'opérateur * ====
''* 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''
Ligne 53 :
* 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
Ligne 71 :
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 };
Ligne 88 :
Cela montre que l'adresse contenue dans le pointeur est toujours incrémentée ou décrémentée d'un multiple de la taille d'un élément (<code>sizeof *ptr</code>).
 
==== Opération utilisant deux pointeurs ====
La seule opération valable (ayant un sens) utilisant deux pointeurs de même type est la soustraction ( <code>-</code> ) donnant le nombre d'éléments entre les deux adresses.
Elle n'a de sens que si les deux pointeurs pointent dans le même tableau d'éléments.
Ligne 100 :
// affiche : Nombre de caractères de 'a' à 'è' = 28
 
=== Pointeur constant et pointeur vers valeur constante ===
Il ne faut pas confondre un pointeur constant (qui ne peut pointer ailleurs) avec un pointeur vers une valeur constante (l'adresse contenue dans le pointeur peut être modifiée mais pas la valeur pointée).
 
Dans les 2 cas le mot clé <code>const</code> est utilisé, mais à 2 endroits différents dans le type de la variable.
 
==== Pointeur vers une valeur constante ====
Le mot-clé <code>const</code> placé avant le type du pointeur permet d'empêcher la modification de la valeur pointée.
 
Ligne 115 :
msg="Test"; // OK -> "Test"
 
==== Pointeur constant ====
Le mot-clé <code>const</code> placé entre le type du pointeur et la variable permet d'empêcher la modification du pointeur lui-même (l'adresse).
 
Ligne 126 :
*msg = 'E'; // OK -> "Essai constant"
 
==== Pointeur constant vers une valeur constante ====
Le mot-clé <code>const</code> apparaissant aux 2 endroits empêche à la fois la modification du pointeur lui-même est celle de la valeur pointée.