FriconiX
Des milliers de pictogrammes gratuits dessinés avec amour!

Cours 8.7. Les variables statiques

Variable locale

Une variable locale est nécessairement déclarée à l'intérieur d'une fonction. La mémoire lui est allouée au moment de sa déclaration et est libérée dès que l'exécution de la fonction se termine. Par conséquent, son contenu est perdu dès que l'on quitte la fonction.

Analysons l'exemple suivant :

int main(void) {
  fct ();
  fct ();
  return 0;
}

void fct(void) {
  int i=0;
  printf ("%d\n",i++);
}

Le programme ci-dessus suivant utilise une fonction fct() qui contient une variable locale i qui est initialisée à 0 à chaque appel de la fonction. On en déduit que la fonction affichera toujours 0.

Variable statique

Une variable statique est aussi une variable déclarée à l'intérieur d'une fonction. La différence entre une variable locale et une variable statique est que la mémoire d'une variable statique n'est pas libérée à la fin de la fonction. La valeur d'une variable statique est même conservée d'un appel à l'autre de la fonction. Une variable statique se déclare avec le mot-clé static placé avant le type de la variable :

static int i;

Reprenons l'exemple précédent et transformons la variable locale i en variable statique :

void fct(void) {
  static int i=0;
  printf ("%d\n",i++);
}

On constate cette fois-ci que la variable i est conservée d'un appel à l'autre de la fonction. Ce mécanisme peut être utile, par exemple, pour compter le nombre de fois qu'une fonction est appelée.

Exercice

On fournit le code de la fonction factorielle() qui retourne la factorielle d'un entier passé en paramètre.

unsigned long int factorielle(unsigned int n) {
  if (n==0) return 1;
  return n*factorielle(n-1);
}

On rappelle que la factorielle est définie par :

$$ !n = 1 \times 2 \times 3 ... \times (n-1) \times n $$

Notons que cette fonction est récursive, c'est-à-dire qu'elle s'appelle elle-même. Le calcul est réalisé grâce à la formule suivante :

$$ !n = n \times !(n-1) $$

Utiliser une variable statique pour compter le nombre de fois que la fonction est appelée dans le calcule de \(!7\)).

Quiz

Les variables statiques permettent

Vérifier Bravo ! Une variable statique sert justement à conserver la valeur de la variable d'un appel à l'autre. Essaie encore ...

La mémoire des variables statiques ...

Vérifier Bravo ! La mémoire est alloué lors de la déclaration, mais elle n'est pas libérée à la fin de la fonction. Essaie encore ...

Qu'affiche le programme suivant ?

int main(void) {
  fct();
  fct();
  fct();
  fct();
  fct();
  return 0;
}
void fct(void) {
  int i=0;
  printf ("%d", i++);
}
Vérifier Bravo ! La variable i locale à la fonction est initialisée à 0 à chaque appel. Essaie encore ...

Qu'affiche le programme suivant ?

int main(void) {
  fct();
  fct();
  fct();
  fct();
  fct();
  return 0;
}
void fct(void) {
  static int i=0;
  printf ("%d", i++);
}
Vérifier Bravo ! i est une variable statique, donc sa valeur est conservée d'un appel à l'autre de la fonction fct(). Essaie encore ...

Qu'affiche le programme suivant ?

int main(void) {
  int i;
  for (i=0;i<5;i++)
    fct();
  return 0;
}
void fct(void) {
  static int i=0;
  printf ("%d", i++);
}
Vérifier Bravo ! Les variables i du main() et de la fonction sont indépendantes. Essaie encore ...

Voir aussi


Dernière mise à jour : 07/11/2020