Constantes pointeur
Remonter à Pointeurs - Index
Un pointeur ou un objet pointé peut être déclaré avec le modificateur const. Aucun élément de type const ne peut changer de valeur. De même, il est illégal de créer un pointeur qui pourrait aller à l'encontre des lois de non affectabilité d'un objet constant. Prenons les exemples suivants :
int i; // i est un int
int * pi; // pi est un pointeur sur int (non initialisé)
int * const cp = &i; // cp est un pointeur constant sur int
const int ci = 7; // ci est un int constant
const int * pci; // pci est un pointeur sur un int constant
const int * const cpc = &ci; // cpc est un pointeur constant sur un
// int constant
Les affectations suivantes sont légales :
i = ci; // Affecte int-const à int
*cp = ci; // Affecte int-const à un objet
// pointé par un pointeur constant
++pci; // Incrémente un pointeur de const
pci = cpc; // Affecte un pointeur-const-sur-const
// à un pointeur-sur-const
Les affectations suivantes sont illégales :
ci = 0; // NON - affectation impossible d'un int-const
ci--; // NON - impossible de modifier un int-const
*pci = 3; // NON - affectation impossible d'un objet
// pointé par un pointeur-sur-const
cp = &ci; // NON - affectation impossible d'un pointeur-const,
// même si la valeur reste inchangée
cpc++; // NON - impossible de modifier un pointeur-const
pi = pci; // NON - si cette affectation était permise,
// vous pourriez donner une valeur à *pci
// (valeur constante) en donnant une valeur à *pi.
Des règles semblables s'appliquent au modificateur volatile. Remarquez que const et volatile peuvent modifier un même identificateur.