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

Contenu supprimé Contenu ajouté
Ligne 88 :
Dans l'exemple 2, la différence d'adresse est de 20 octets (<code>5 * sizeof(int)</code>).
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>).
 
===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 constant====
Le mot-clé <code>const</code> placé avant le type du pointeur permet d'empêcher la modification de la valeur pointée.
 
Exemple:
const char* msg="essai constant";
*msg = 'E'; // <- Interdit, la valeur pointée ne peut être modifiée
msg="Test"; // OK -> "Test"
 
====Pointeur vers une valeur constante====
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).
 
Exemple:
char* const msg="essai constant";
msg="Test"; // <- Interdit (erreur de compilation),
// ne peut pointer la chaîne "Test"
*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.
 
Exemple:
const char* const msg="essai constant";
msg="Test"; // <- Interdit (erreur de compilation),
// ne peut pointer la chaîne "Test"
*msg = 'E'; // <- Interdit, la valeur pointée ne peut être modifiée