salut à tous,
je suis débutant en c, j'aime savoir la signification de " **pointeur "
merci d'avance
salut à tous,
je suis débutant en c, j'aime savoir la signification de " **pointeur "
merci d'avance
Salut,
Il s'agit d'une double indirection, un pointeur sur un pointeur.
Jérôme
PS un exemple d'utilisation pourrait être le renvoie d'un pointeur dans un argument d'une fonction.
Quand tu définis une variable comme ça :
tu définis une variable qui contient un entier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part int maVar;
Lorsque tu as ceci :
Tu définis une variable qui contient l'adresse d'un espace mémoire contenant un entier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part int *maVar;
Donc... Lorsque tu as :
Tu définis une variable qui contient l'adresse d'un espace mémoire contenant l'adresse d'un autre espace mémoire contenant un entier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part int **maVar;
On se sert de ce genre de pointeur pour faire des tableaux dynamiques à deux dimensions, ou bien pour stocker un tableau de chaînes de caractères, ou encore en paramètres de fonction afin de pouvoir modifié l'espace mémoire pointée dans la fonction et en récupérer la valeur dans la fonction appelante.
Soit le morceau de code suivant:
val est une variable contenant la valeur 10, p est une variable de type pointeur sur int contenant l'adresse de val et pp est une variable de type pointeur sur pointeur sur int contenant l'adresse de p.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #include <stdio.h> int main (void) { int val = 10; /* -tc- val contient l'entier 10 */ int *p = &val; /* -tc- p contient l'adresse de val */ int **pp = &p; /* -tc- pp contient l'adresse de p */ printf("La valeur de val est %d\n", *p); printf("L'adresse de val est %p\n", (void *) *p); printf("La valeur de val est %d\n", **pp); return 0; }
Pour accéder à la valeur de val à l'aide du pointeur p, il faut déréférencer le pointeur p avec de l'opérateur unaire *. Cela donne:
De la même manière, pour accéder à la valeur de p via pp, on déréférence le pointeur pp. Il vient donc:
Code : Sélectionner tout - Visualiser dans une fenêtre à part printf("La valeur de val est %d\n", *p);
Pour finir, si on veut accéder à la valeur de val via le pointeur pp, il faut déréférencer 2 fois. D'où l'utilisation de 2 opérateurs de déréférencement (*). On a donc:
Code : Sélectionner tout - Visualiser dans une fenêtre à part printf("L'adresse de val est %p\n", (void *) *p);
Thierry
Code : Sélectionner tout - Visualiser dans une fenêtre à part printf("La valeur de val est %d\n", **pp);
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
Partager