Bonjour,
J'ai un petit problème à comprendre les pointeurs des pointeurs et dans quel cas ils peuvent être utilisés ?
Si quelqu'un peut m'expliquer cette notion de ** voir *** avec des exemples
Merci à vous
Bonjour,
J'ai un petit problème à comprendre les pointeurs des pointeurs et dans quel cas ils peuvent être utilisés ?
Si quelqu'un peut m'expliquer cette notion de ** voir *** avec des exemples
Merci à vous
Un pointeur est une variable comme une autre. À ce titre, il occupe donc de la place en mémoire et sa position a une adresse, comme tout le reste. Un pointeur peut donc pointer vers un entier, un caractère, une structure,etc. ou… un autre pointeur, lequel pointe lui-même vers entier, un caractère, une structure,etc. ou…
Tu passes également un pointeur lorsque tu passes un tableau d'éléments consécutifs et de même taille. Le pointeur pointe alors le premier élément, et peut être incrémenté pour passer aux suivants. C'est le cas pour les tableaux déclarés comme tels mais également pour les chaînes de caractères, qui ne sont rien d'autre que des tableaux de caractères.
Ainsi, une chaîne se référence avec un « char * ». Si tu veux faire un tableau de chaînes, il te faut donc un tableau de pointeurs vers le début de chacune de ces chaînes, et tu obtiens un « char ** ».
Ça peut être utile également quand une fonction a besoin de l'adresse d'un pointeur pour aller le remplir aller même. Par exemple, une fonction TrouveNom() qui se servirait de sa valeur de retour pour indiquer ou non une erreur, et qui te passerait la chaîne en paramètre, donnerait :
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 /* Prototype */int TrouveNom (char **) int main (void) { char * nom; TrouveNom (&nom); }
L'adresse du pointeur char * « nom » est donc de type char **. Ensuite, par induction, on comprend que l'on peut comme ça multiplier le nombre d'étoiles, sans limites. Cela dit, il est assez rare que l'on dépasse le nombre de trois étoiles.
Partager