Leçon 40 : Pointeur de pointeur (Doubles pointeurs)
Un double pointeur (ou pointeur vers un pointeur) est une variable qui stocke l'adresse d'une autre variable pointeur.
Déclaration
Un double pointeur utilise deux astérisques (**).
c int x = 10; int *p = &x; // p stocke l'adresse de x int **pp = &p; // pp stocke l'adresse de p
Déréférencement des doubles pointeurs
pp: Contient l'adresse dep.*pp: Déréférence une fois, ce qui donne le contenu dep(l'adresse dex).**pp: Déréférence deux fois, ce qui donne le contenu dex(la valeur 10).
c printf("Valeur de x via **pp : %d\n", **pp); // 10
// On peut modifier x via le double pointeur **pp = 20; printf("Nouvelle valeur de x : %d\n", x); // 20
Applications des doubles pointeurs
1. Passage d'un pointeur par référence
Cela permet à une fonction de modifier l'adresse réelle contenue dans une variable pointeur de la fonction appelante (ex: initialisation d'un pointeur de structure ou redimensionnement d'un tableau dynamique).
2. Implémentation de tableaux dynamiques 2D
Créer dynamiquement une matrice 2D nécessite d'allouer un tableau de pointeurs, où chaque pointeur pointe vers une ligne allouée dynamiquement (tableau de données).
c // Allocation pour 10 lignes (pointeurs), chacune pointant vers 20 colonnes (entiers) int **matrice_dynamique = (int **) malloc(10 * sizeof(int *)); for (int i = 0; i < 10; i++) { matrice_dynamique[i] = (int *) malloc(20 * sizeof(int)); }