Pointeur de pointeur de précisions

Je suivais ce tutoriel sur comment un pointeur vers un pointeur travail.

Permettez-moi de citer le passage pertinent:


    int i = 5, j = 6, k = 7;
    int *ip1 = &i, *ip2 = &j;

Maintenant, nous pouvons définir

    int **ipp = &ip1;

et ipp points de ip1 qui points à i. *ipp est ip1, et **ipp est i, ou 5. On peut illustrer la situation, avec notre familier de la boîte-et-flèche de notation, comme ceci:

Pointeur de pointeur de précisions

Si nous pouvons alors dire

    *ipp = ip2;

nous avons changé le pointeur pointé par ipp (qui est, ip1) pour contenir une copie de ip2, de sorte qu'il (ip1) maintenant les points à j:

Pointeur de pointeur de précisions


Ma question est: Pourquoi, dans la deuxième image, est ipp pointe toujours vers le ip1 mais pas ip2?

  • s'il vous plaît, ajouter le type de ipp lors de la définition, de sorte que votre question est terminée 😉
  • La manière dont vous avez doublé vos photos, la première ligne sont tous les objets de type int, la deuxième rangée sont tous int * et de l'ipp est int **. Quand vous dites *ipp = ip2; de la lecture et de l'écriture que sur le int * ligne de votre diagramme.
  • Savez-vous comment faire des liens symboliques de travail? Les pointeurs sont un peu comme les liens symboliques (que vous avez à déclarer, au moment de la compilation exactement combien de couches de pointeurs que vous pouvez avoir).
  • Avez-vous dessinez les diagrammes à la main? Si non, quel outil utilisez-vous?
  • Parce que ipp pointant vers ip1 donc *ipp = ip2 est la même que ip1 = ip2
  • Pouvons-nous arrêter d'écrire asteriks loin de la pointe type? int **ipp est beaucoup moins intuitive que int** ipp, surtout quand **ipp signifie une chose complètement différente à l'extérieur de déclarations de type.
  • int **ipp semble assez intuitif pour moi. Cela veut dire, je suis en train de faire **ipp un int. Ce qui est vrai.
  • Je n'ai jamais vu de cette façon. La pensée ipp est un pointeur vers un pointeur de int (aka int**) semble plus facile pour moi.
  • les significations et les personnels de l'intuitivité en dehors, pensez à ceci: Le type de ipp est int**, de sorte il suffit d'écrire int** au lieu de "magiqueimp de déréférencement est un int" compréhensions.
  • Mais sur int** a, b, vous n'obtenez pas de deux pointeurs. Donc, ici, il est mieux écrit que int **a, b, *c, ***d. (Non, ne pas l'écrire, c'est mal lisible. Mais si tu avais déjà serait dû à une quelconque raison, il serait prise en compte de cette façon.)
  • parce que vous ne modifiez pas la valeur de ipp