Combien de niveaux de pointeurs peut-on avoir?

Combien de pointeurs (*) sont autorisés dans une seule variable?

Considérons l'exemple suivant.

int a = 10;
int *p = &a;

De la même façon que nous pouvons avoir

int **q = &p;
int ***r = &q;

et ainsi de suite.

Par exemple,

int ****************zz;
  • Si cela devient un réel problème pour vous, vous faites quelque chose de très mal.
  • Techniquement il n'y a probablement pas de limite (bien que c'est le compilateur spécifique). La véritable limite est celle de votre (et vos collègues de travail') capacité mentale de garder une trace de ce que votre variable représente en fait. Et en respectant le code lisible est généralement plus important que le faible niveau d'optimisation. De ce point de vue, dans le code de production déjà triple indirection (par exemple int***) n'est pas recommandée dans la plupart des cas.
  • Vous pouvez continuer à ajouter des niveaux de pointeurs jusqu'à ce que votre cerveau explose ou le compilateur fond - selon ce qui se produit en peu de temps.
  • Depuis un pointeur vers un pointeur est nouveau, eh bien, juste un pointeur, il ne devrait pas y avoir de limite théorique. Peut-être que le compilateur ne pas être en mesure de la traiter au-delà de certains ridiculement haute limite, mais bon...
  • avec le nouveau c++, vous devez utiliser quelque chose comme std::shared_ptr<shared_ptr<shared_ptr<...shared_ptr<int>...>>>
  • Peut-être un "décoré commentaire" a obtenu hors de contrôle et a tiré cette question 🙂
  • Pourquoi ne pas simplement écrire un programme simple pour le tester sur votre compilateur? Quelle que soit répondu par d'autres, est susceptible de ne pas correspondre exactement à votre environnement.
  • Pourquoi? Ce qui est si destructeur (ou non constructive ) à ce sujet?
  • les pires conseils possibles, il peut compiler et d'échouer dans la prochaine version ou il peut échouer maintenant à un bug du compilateur. vérifiez la documentation du compilateur, vérifiez la norme et en dernier recours, de vérifier la mise en œuvre actuelle.
  • il peut faire sens pour les générateurs de code...
  • cela montre un problème dans la norme C++ - il n'y a aucun moyen pour augmenter les pointeurs intelligents de pouvoirs. Nous devons immédiatement à la demande d'une extension à l'appui par exemple (pow (std::shared_ptr, -0.3))<T> x; pour -0.3 niveaux d'indirection.
  • Il dépend de la mémoire de votre système. Si elle excède, le système se bloque. Sinon, elle est infinie. Vous pouvez essayer avec while(1).
  • Mmmm, nah. C'est sur le sujet. Et si l'un de vous reddit les gens veulent aller à travers mes questions/réponses et massivement upvote eux, n'hésitez pas!
  • le lien que vous avez fourni est de l'or, juste de l'or pur.
  • J'ai eu la "joie" de maintenir un trois étoiles du programmeur base de code. Il avait aussi une tendance à traiter toutes les conditions d'erreur avec exit(0) (et rien d'autre, pas même un printf).
  • Assurez-vous que votre réponse appartient ici?
  • yupe n'êtes-vous pas sûr
  • semble être la bonne façon de force de code spaghetti au rpc 🙂
  • bien logiquement, il ne ferait aucun sens de créer des pointeurs à cette n niveau. Le compilateur n'a pas de problèmes, mais votre programme si elle utilise des
  • jamais entendu parler de la parole, mais reconnaissons donc beaucoup de programmeurs que je l'ai rencontré à travers les années. Merci pour le partage de cette brillante lien.
  • J'ai été taquiné pour l'écriture de 3-étoiles code de once upon a time. Si c'était en fait un tableau d'adresses de chaînes... qui est (dans mon esprit) très différente de pointeur de pointeur de pointeur de char, comme j'ai été accusé de. [soupir] je serais encore défendre ce code.
  • Je sais que beaucoup de 3-étoiles programmeurs. Ils sont quantique des chimistes du programme 4D tableaux dans le naïf, mais courants de la mode.
  • Tu veux dire, comme ça? coliru.stacked-crooked.com/a/92a6666764acbaff 😀
  • Notez qu'il existe un assez commun pointeur qui est généralement écrit avec trois niveaux: char*** argv (ou souvent écrit en tant que char** argv[]). Par exemple, c'est exactement la façon dont vous call MPI_Init (et d'autres fonctions qui peuvent changer votre argv lors du passage).
  • Une fois, j'ai dû utiliser un void**** dans un véritable programme de vie.
  • Tout programme qui nécessite de nombreux niveaux de pointeurs [1] probablement très inefficace et [2] a probablement beaucoup de bugs. Il suffit de coller avec une ou deux couches de pointeurs.
  • Dire que pour Microsoft 🙂 L'objet en question a été le pointeur vers un pointeur intelligent autour d'un pointeur d'interface COM, qui a effectivement des points à un pointeur vers un tableau de pointeurs de fonction. Avec moi encore? 🙂

InformationsquelleAutor Parag | 2012-04-10