Constantes pointeur

De Appmethod Topics
Aller à : navigation, rechercher

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.