Retour au cours

Pointeur de pointeur (Doubles pointeurs)

Langage C : de Zéro à Héros - Le Guide Complet pour Débutants

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

  1. pp : Contient l'adresse de p.
  2. *pp : Déréférence une fois, ce qui donne le contenu de p (l'adresse de x).
  3. **pp : Déréférence deux fois, ce qui donne le contenu de x (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)); }