-
orestis.malaspin authoredorestis.malaspin authored
pointeurs_avances.md 1.90 KiB
title: Pointeurs avancés
date: 2020-02-19
Pointeurs avancés
Pointeurs de fonctions (1/2)
-
Considérons la fonction
max
retournant la valeur maximale d'un tableauint max(int *t, int size) { int val_max = t[0]; for (int i = 1; i < size; ++i) { if (t[i] > val_max) { val_max = t[i]; } } return val_max; }
-
L'appel à
max
, retourne l'adresse de la fonction en mémoire. -
On peut affecter cette valeur à un pointeur.
Pointeurs de fonctions (2/2)
-
Le type de la fonction
max
estint (*pmax)(int *, int);
-
Le type doit être déclaré avec la signature de la fonction.
-
On peut alors utiliser l'un ou l'autre indifféremment
int (*pmax)(int *, int); pmax = max; int tab[] = {1, 4, -2, 12}; printf("%d", max(tab, 4)); // retourne 12 printf("%d", pmax(tab, 4)); // retourne 12 aussi
const
Pointeurs et 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?
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
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.