diff --git a/base_5.md b/base_5.md index 52c88bd8e1497d94efab5dc3db86ca6da7f23e83..31131bfda2992ed9f120f58dc274ec54e956c7be 100644 --- a/base_5.md +++ b/base_5.md @@ -45,6 +45,44 @@ - Permettent d'avoir plusieurs chemins d'accès à une valeur. - Lire **et** écrire en même temps dans un bout de mémoire devient possible: **danger**. +# Pointeurs et `const` + +## Deux niveaux de constance + +- Le mot clé `const` permet de déclarer des valeurs "constantes" qui ne changeront plus en cours d'exécution du programme. +- Mais qu'est-ce que cela veut dire pour les pointeurs? + + ```C + int n = 12; + + const int *p = &n; // la valeur *p est const, p non + int const *p = &n; // la valeur *p est const, p non + int *const p = &n; // la valeur p est const, *p non + const int *const p = &n; // la valeur p et *p sont const + ``` + +## Exemples + +```C +int n = 12; int m = 13; + +const int *p = &n; // la valeur *p est const, p non +*p = m; // erreur de compilation. +p = &m; // OK + +int const *p = &n; // la valeur *p est const, p non +*p = m; // erreur de compilation. +p = &m; // OK + +int *const p = &n; // la valeur p est const, *p non +*p = m; // OK +p = &m; // erreur de compilation. + +const int *const p = &n; // la valeur p et *p sont const +*p = m; // erreur de compilation. +p = &m; // erreur de compilation. +``` + # La fonction `sizeof()` (1/2) - La fonction `sizeof()`{.C} permet de connaître la taille en octets: