Un objet const
peut être initialisé (et doit l'être)
mais
ne peut être modifié.
Cependant un objet const
a une adresse à laquelle on peut
accéder.
En ce sens, la situation est différente des ``constantes''
du préprocesseur ( #define I=0
) qui bien entendu n'ont pas d'adresse.
Une tentative de modification d'une constante provoque un message d'erreur du compilateur; de même, affecter l'adresse d'un objet constant à un pointeur vers un objet non constant provoque une erreur.
const int ci=8; int i; int *pi; const int *pci; // pointeur vers constante int void main(){ ci=2; // interdit pi=&ci; // interdit pci=&ci; // oui *pci=8; // interdit }
const int ci=8; int i; const int *pci; // pointeur vers const int * const cpi=&i; // pointeur constant void main(){ pci=&ci; // ok pci=&i; // ok // *pci=8; interdit i=9; // ok *(int *)pci=10; // ok *cpi=10; // ok // cpi=&i; interdit }