diff --git a/slides/pointeurs_avances.md b/slides/pointeurs_avances.md new file mode 100644 index 0000000000000000000000000000000000000000..da26a3599e622e2f4fed82d1c35e026743aa7ab9 --- /dev/null +++ b/slides/pointeurs_avances.md @@ -0,0 +1,55 @@ +--- +title: Pointeurs avancés +date: 2022-01-18 +patat: + wrap: true + margins: + left: 10 + right: 10 +--- + +# Pointeurs et `const` + +\footnotesize + +- Le mot-clé `const` permet de déclarer des valeurs **constantes** qui ne changeront plus en cours d'exécution du programme. + + ```C + const int a = 1; + a = 2; // interdit, erreur de compilation! + ``` + +## Deux niveaux de constance + +- Mais qu'est-ce que cela veut dire pour les pointeurs? +* Constance de la valeur de l'adresse? de la valeur pointée? des deux? + + ```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 + ``` + +# Pointeurs et `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. +``` + +