salut à tous,
je suis débutant en c, j'aime savoir la signification de " **pointeur "
merci d'avance
Version imprimable
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:int maVar;
Lorsque tu as ceci :
Tu définis une variable qui contient l'adresse d'un espace mémoire contenant un entier.Code: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: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:
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: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:printf("L'adresse de val est %p\n", (void *) *p);
ThierryCode:printf("La valeur de val est %d\n", **pp);