logo

C – Pointeur vers pointeur (double pointeur)

Prérequis: Pointeurs en C

Le pointeur vers un pointeur en C est utilisé lorsque l'on souhaite stocker l'adresse d'un autre pointeur. Le premier pointeur est utilisé pour stocker l'adresse de la variable. Et le deuxième pointeur est utilisé pour stocker l’adresse du premier pointeur. C'est pourquoi ils sont également connus sous le nom de doubles pointeurs . Nous pouvons utiliser un pointeur vers un pointeur pour modifier les valeurs des pointeurs normaux ou créer un tableau 2D de taille variable. Un pointeur double occupe la même quantité d’espace dans la pile mémoire qu’un pointeur normal.

Déclaration de pointeur vers un pointeur en C

Déclarer un pointeur vers un pointeur est similaire à déclarer un pointeur en C. La différence est que nous devons placer un « * » supplémentaire avant le nom du pointeur.



caractères d'échappement Java
data_type_of_pointer **name_of_variable = & normal_pointer_variable;>
int val = 5; int *ptr = &val; // storing address of val to pointer ptr. int **d_ptr = &ptr; // pointer to a pointer declared  // which is pointing to an integer.>

Le diagramme ci-dessus montre la représentation en mémoire d'un pointeur vers un pointeur. Le premier pointeur ptr1 stocke l'adresse de la variable et le deuxième pointeur ptr2 stocke l'adresse du premier pointeur.

Exemple de double pointeur en C

C




// C program to demonstrate pointer to pointer> #include> int> main()> {> >int> var = 789;> >// pointer for var> >int>* ptr2;> >// double pointer for ptr2> >int>** ptr1;> >// storing address of var in ptr2> >ptr2 = &var;> >// Storing address of ptr2 in ptr1> >ptr1 = &ptr2;> >// Displaying value of var using> >// both single and double pointers> >printf>(>'Value of var = %d '>, var);> >printf>(>'Value of var using single pointer = %d '>, *ptr2);> >printf>(>'Value of var using double pointer = %d '>, **ptr1);> >return> 0;> }>

>

>

Sortir

Value of var = 789 Value of var using single pointer = 789 Value of var using double pointer = 789>

Comment fonctionne le double pointeur ?

obtenir une connexion

Le fonctionnement du double pointeur peut être expliqué à l’aide de l’image ci-dessus :

  • Le double pointeur est déclaré en utilisant la syntaxe indiquée ci-dessus.
  • Après cela, nous stockons l’adresse d’un autre pointeur comme valeur de ce nouveau double pointeur.
  • Maintenant, si nous voulons manipuler ou déréférencer l'un de ses niveaux, nous devons utiliser l'opérateur Astérisque ( * ) le nombre de fois vers le bas du niveau auquel nous voulons descendre.

Taille du pointeur vers le pointeur en C

Dans le langage de programmation C, un double pointeur se comporte de la même manière qu'un pointeur normal en C. Ainsi, la taille de la variable à double pointeur est toujours égale à celle des pointeurs normaux. Nous pouvons vérifier cela en utilisant le programme C ci-dessous.

Exemple 1 : Programme C pour trouver la taille d'un pointeur vers un pointeur.

C




// C program to find the size of pointer to pointer> #include> int> main()> {> >// defining single and double pointers> >int> a = 5;> >int>* ptr = &a;> >int>** d_ptr = &ptr;> >// size of single pointer> >printf>(>' Size of normal Pointer: %d '>,>sizeof>(ptr));> >// size of double pointer> >printf>(>' Size of Double Pointer: %d '>,>sizeof>(d_ptr));> >return> 0;> }>

>

>

programmation dynamique
Sortir

 Size of normal Pointer: 8 Size of Double Pointer: 8>

Note: Le résultat du code ci-dessus dépend également du type de machine utilisée. La taille d'un pointeur n'est pas fixe dans le langage de programmation C et dépend d'autres facteurs tels que l'architecture du processeur et le système d'exploitation utilisé. Habituellement, pour un système d'exploitation 64 bits, la taille sera de 8 octets et pour un système d'exploitation 32 bits, la taille sera de 4 octets.

Application des doubles pointeurs en C

Voici les principales utilisations du pointeur vers les pointeurs en C :

  • Ils sont utilisés dans l’allocation dynamique de mémoire de tableaux multidimensionnels.
  • Ils peuvent être utilisés pour stocker des données à plusieurs niveaux telles que le paragraphe du document texte, les phrases et la sémantique des mots.
  • Ils sont utilisés dans les structures de données pour manipuler directement l'adresse des nœuds sans copie.
  • Ils peuvent être utilisés comme arguments de fonction pour manipuler l'adresse stockée dans le pointeur local.

Pointeurs multiniveaux en C

Les doubles pointeurs ne sont pas les seuls pointeurs multiniveaux pris en charge par le langage C. Et si nous voulons changer la valeur d’un double pointeur ?

Dans ce cas, nous pouvons utiliser un triple pointeur, qui sera un pointeur vers un pointeur vers un pointeur, c'est-à-dire int ***t_ptr.

Syntaxe du triple pointeur

  pointer_type *** pointer_name;>

De même, pour modifier la valeur d'un pointeur triple, nous pouvons utiliser un pointeur vers un pointeur vers un pointeur vers un pointeur (Four Level Pointer). En d’autres termes, on peut dire que pour changer la valeur d’une variable niveau – x on peut utiliser un pointeur niveau – x+1. Et ce concept peut être étendu davantage.

Note : Nous pouvons utiliser n'importe quel pointeur de niveau en C. Il n'y a aucune restriction à ce sujet mais cela rend le programme très complexe et vulnérable aux erreurs.

Doit lire - Pointeur de fonction en C