#include <stdio.h>

long
successeur (long * p /* «long *» est le type des adresses de
                        variables entières «long» */)
{
  // printf ("Debug: p vaut %p\n", p);

  /* Ici l'opérateur «*», dans les EPPRESSIONS (différent du
     TYPE «long *») sert à lire la mémoire.  Donc «* p» donne
     comme résultat le contenu de la mémoire à l'adresse p. */
  // return (* p) + 1;

  /* Si vous trovuez la ligne précédente, commentée, difficile
     à lire, on peut utiliser une variable intermédiaire :
     c'est la même chose. */
  long contenu = * p; // Lecture de la mémoire à l'adresse p.
  return contenu + 1;
}

int
main (void)
{
  long un_nombre = 42;
  /* L'opérateur «&» dans les EXPRESSIONS, étant donné une
     variable d'un type T ou certains cas des expressions,
     donne comme résultat sont adresse en mémore de type
     T *.  Par exemple, prendre l'adresse d'une variable de
     type «long» donne comme résultat un pointer de type
     «long *».
     C'est à dire, «&» construit un pointeur. */
  printf ("%li\n", successeur (& un_nombre));

  return 0; // sort avec succès
}
