adplus-dvertising

Nous utilisons des cookies pour améliorer votre expérience. En poursuivant votre navigation sur ce site, vous acceptez l'utilisation de cookies.


Politique de confidentialité

Double pointeur en langage C - déclaration et utilisations

Double pointeur en langage C - déclaration et utilisations

Nous savons déjà qu'un pointeur pointe sur un emplacement en mémoire et sert donc à stocker l'adresse des variables. Donc, quand on définit un pointeur de 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 comme des doubles pointeurs.

Comment déclarer un double pointeur en C?

Déclarer un double pointeur est similaire à déclarer un pointeur. La différence est que nous devons placer un "*" supplémentaire avant le nom du pointeur.

Syntaxe :
                                type_donnees **nom_pointeur;
                            
Exemple 1:
                                int **ptr;
                            
Exemple 2 :
                                    int main(void)
                                    {
                                        int age = 25;
                                    
                                        // pointeur vers age
                                        int *ptr1;
                                    
                                        // double pointeur vers ptr1
                                        int **ptr2;
                                    
                                        // stocker l'adresse de age dans ptr1
                                        ptr1 = &age;
                                    
                                        // stocker l'adresse de ptr1 dans ptr2
                                        ptr2 = &ptr1;
                                    
                                        // adresse de age sera affichée
                                        printf("adresse de age : %x\n", ptr1);
                                    
                                        // adresse de ptr1 sera affichée
                                        printf("adresse de ptr1: %x\n", ptr2);
                                    
                                        // La valeur stockée à l'adresse contenue par ptr1, c'est-à-dire 25, sera affichée.
                                        printf("Valeur de age en utilisant un seul pointeur : %d\n", *ptr1);
                                    
                                        // valeur stockée à l'adresse contenue par le pointeur stocké dans ptr2
                                        printf("Valeur de age en utilisant le double pointeur : %d\n", **ptr2);
                                    
                                        return 0;
                                    }
                            
adresse de age : e5f88af8
adresse de ptr1: e5f88af0
Valeur de age en utilisant un seul pointeur : 25
Valeur de age en utilisant le double pointeur : 25

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

Pourquoi utiliser les doubles pointeurs?

Une des raisons est que vous souhaitez modifier la valeur du pointeur transmis à une fonction en tant qu'argument de la fonction. Pour ce faire, vous avez besoin d'un pointeur sur un pointeur.

En termes simples, utilisez ** lorsque vous souhaitez conserver l’allocation ou affectation de mémoire, même en dehors d’un appel de fonction.

Par exemple, dans des tableaux dynamiques ou dans le cas d'opérations sur une liste liée (supprimer, insérer) où vous devez modifier la valeur du pointeur pointant sur le premier noeud, à partir d'une fonction.

Partager ce cours avec tes amis :
Rédigé par ESSADDOUKI Mostafa
ESSADDOUKI
The education of the 21st century opens up opportunities to not merely teach, but to coach, mentor, nurture and inspire.