Aller au contenu

Chapitre 18 : Pointeurs Avancés

Allez plus loin dans la maîtrise de la mémoire avec des concepts de haut niveau indispensables pour le développement système et les bibliothèques génériques.

Concepts abordés

  • Pointeurs de fonctions : Stocker l'adresse d'une fonction dans une variable pour l'appeler dynamiquement ou la passer en paramètre (callbacks).
  • Pointeurs vers pointeurs (Double pointeurs) : Utilisation de **ptr pour manipuler des tableaux de chaînes de caractères ou créer des matrices dynamiques.
  • Pointeurs génériques void * : Pointeur capable de pointer vers n'importe quel type de donnée. C'est la base de la programmation générique en C (ex: la fonction qsort).
  • Modificateur const et pointeurs : Comprendre la différence entre un pointeur vers une constante (const int *p) et un pointeur constant (int *const p).

Explications du code

pointeurs_avances.c

Le code illustre l'utilisation de qsort avec des fonctions de comparaison personnalisées, la création d'une calculatrice basée sur un tableau de pointeurs de fonctions, et l'allocation dynamique d'une matrice (tableau 2D) via un double pointeur.

Conseils et astuces

  • Le mot-clé void * : Vous ne pouvez pas déréférencer directement un void *. Vous devez d'abord le "caster" (convertir) vers un type précis (ex: (int *)ptr).
  • Complexité : La syntaxe des pointeurs de fonctions peut être complexe. Utilisez typedef pour simplifier vos déclarations (ex: typedef int (*MaFonction)(int);).
  • Matrices dynamiques : N'oubliez pas que pour libérer une matrice int **m, vous devez d'abord libérer chaque ligne (m[i]) avant de libérer le tableau de pointeurs principal (m).