199 votes

Comment fonctionnent les pointeurs vers les pointeurs en C ?

Comment fonctionnent les pointeurs vers les pointeurs en C ? Quand les utiliseriez-vous ?

45 votes

Non, ce n'est pas du travail à domicile...., je voulais juste savoir... parce que je vois cela souvent quand je lis du code C.

1 votes

Un pointeur sur un pointeur n'est pas un cas particulier de quelque chose, donc je ne comprends pas ce que vous ne comprenez pas à propos de void**.

1 votes

Pour les tableaux 2D, le meilleur exemple est la ligne de commande args "prog arg1 arg2" est stockée char**argv. Et si l'appelant ne veut pas allouer la mémoire ( la fonction appelée allouera la mémoire )

8voto

Alex Balashov Points 1151

Lorsqu'une référence à un pointeur est nécessaire. Par exemple, lorsque vous souhaitez modifier la valeur (adresse pointée) d'une variable pointeur déclarée dans la portée d'une fonction appelante à l'intérieur d'une fonction appelée.

Si vous passez un simple pointeur en argument, vous modifiez les copies locales du pointeur, et non le pointeur original dans la portée de l'appel. Avec un pointeur vers un pointeur, vous modifiez ce dernier.

0 votes

Bien expliqué pour la partie "Pourquoi".

7voto

epatel Points 32451

Un pointeur vers un pointeur est également appelé un poignée . On l'utilise souvent lorsqu'un objet peut être déplacé dans la mémoire ou supprimé. On est souvent responsable du verrouillage et du déverrouillage de l'utilisation de l'objet de mémoire. objet afin qu'il ne soit pas déplacé lors de son accès.

Il est souvent utilisé dans les environnements à mémoire limitée, comme le Palm OS.

ordinateur.howstuffworks.com Lien>>

www.flippinbits.com Lien>>

6voto

Luke Schafer Points 6250

C'est un pointeur vers la valeur de l'adresse du pointeur. (c'est terrible je sais)

En fait, il vous permet de passer un pointeur à la valeur de l'adresse d'un autre pointeur, de sorte que vous pouvez modifier l'endroit où pointe un autre pointeur à partir d'une sous-fonction, par exemple :

void changeptr(int** pp)
{
  *pp=&someval;
}

0 votes

Désolé, je sais que c'était plutôt mauvais. Essayez de lire, euh, ceci : codeproject.com/KB/cpp/PtrToPtr.aspx

5voto

Igor Oks Points 9737

Vous avez une variable qui contient l'adresse de quelque chose. C'est un pointeur.

Ensuite, vous avez une autre variable qui contient l'adresse de la première variable. C'est un pointeur vers un pointeur.

4voto

akappa Points 5452

Un pointeur vers un pointeur est, eh bien, un pointeur vers un pointeur.

Un exemple significatif de someType** est un tableau bidimensionnel : vous avez un tableau, rempli de pointeurs vers d'autres tableaux, donc lorsque vous écrivez

dpointer [5] [6]

vous accédez au tableau qui contient des pointeurs vers d'autres tableaux à sa 5e position, récupérez le pointeur (que fpointer son nom) et accédez ensuite au 6e élément du tableau référencé à ce tableau (donc, fpointer[6]).

2 votes

Il ne faut pas confondre les pointeurs avec les tableaux de rang 2, par exemple int x[10][10] où vous écrivez x[5][6] vous accédez à la valeur du tableau.

0 votes

Il ne s'agit là que d'un exemple où un void** est approprié. Un pointeur sur un pointeur n'est qu'un pointeur qui pointe sur, eh bien, un pointeur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X