En C++ Quelle est la différence entre char const *ptr=&ch;
et const char *ptr=&ch;
Déclaration des pointeurs en C++
Répondre
Ils sont identiques, c'est-à-dire pointer to const char
.
Cependant char * const ptr
est différent, étant un const pointer to (non-const) char
.
Et juste pour compléter l'ensemble, const char * const ptr
est un const pointer to const char
.
+1. Réponse complète – ereOn
Ceci est un bon exemple pour tenter de mettre le 'const' qualifié * après * le type qualifié. 'char const *' semble bizarre à beaucoup de gens mais c'est cohérent avec 'char const * const'. –
Aucune différence en C++.
Il est important que const
soit avant *
ou après *
.
Const s'applique à tout ce qui est sur sa gauche immédiate (sauf s'il n'y a rien, auquel cas il s'applique à ce qui est son droit immédiat). Donc, il n'y a pas de différence.
char * const ptr
serait un pointeur de const à la valeur variable cependant.
D'autres réponses ont couvert la solution technique - vos deux exemples sont les mêmes.
Beaucoup de gens préfèrent lire de droite à gauche lorsqu'ils traitent const
en C++. En anglais, nous aimons penser à un X constant, alors que C++ aime analyser X const. La lecture de droite à gauche donne un résultat plus anglais.
Un exemple assez extrême:
C const * bar(A * const, B const * const) const;
De droite à gauche ce lit comme « une fonction constante bar
prenant comme paramètres un pointeur constant à un A
et un pointeur constant à une B
constante, renvoyant un pointeur sur une constante C
'. Notez que les trois types de pointeurs sont différents.
Si quelqu'un est intéressé, le livre 'C++ Gotchas' de Stephen C. Dewhurst parle de cette technique de déclaration de pointeurs. – TheJuice
char const *ptr=&ch;
et const char *ptr=&ch;
signifie que char est const, où le pointeur est variable (ou peut être modifié).
Mais dans le cas de char * const ptr
, vous ne pouvez pas réaffecter le pointeur une fois que vous l'avez défini. donc c'est un pointeur const vers une chaîne de caractères.
- 1. liste des pointeurs en C++
- 2. Initialisation de pointeurs en C++
- 3. Déclaration des collections en C#
- 4. Incrémentation des pointeurs C
- 5. pointeurs vides en C++
- 6. tableau double par des pointeurs en C
- 7. Attention lors de l'utilisation des pointeurs de fonction en C
- 8. déclaration d'ami en C++
- 9. déclaration avant en C++
- 10. pointeurs de fonction en C
- 11. Passer des pointeurs vers des structures privées en C?
- 12. Aide avec des pointeurs en C en utilisant qsort, bsearch
- 13. Mise en route avec des pointeurs intelligents en C++
- 14. en passant des paramètres en C++ (pointeurs me confus)
- 15. Déclaration et définition différentes en C++
- 16. pointeurs vers des pointeurs et des tableaux de pointeurs
- 17. déclaration d'istream générique en C++
- 18. Déclaration, attribution et affectation d'un tableau de pointeurs aux pointeurs de fonction
- 19. C - initialisation des pointeurs, la position astérisque
- 20. Déclaration de tableaux en C#
- 21. Enregistrer des pointeurs dans un fichier en C++
- 22. Pointeurs de fonction fonctionnant comme des fermetures en C++
- 23. Utilisation d'un tableau avec des pointeurs en C
- 24. Copie de deux structures en C contenant des pointeurs char
- 25. Déclaration de structure en C
- 26. Référencement ou déclaration en C++
- 27. Permutation d'adresses de pointeurs en C++
- 28. C: Syntaxe correcte pour l'allocation de la mémoire en utilisant des pointeurs sur les pointeurs
- 29. Comment « épingler » des pointeurs C++/CLI
- 30. C++ pointeurs simple question
Il n'y a pas de différence, pour plus d'informations: http://duramecho.com/ComputerInformation/WhyHowCppConst.html – Akanksh
duplication possible de http://stackoverflow.com/questions/2211954/difference-between-these-two-const -pointer-declarations-c – starblue
En outre, vous pouvez utiliser [cdecl.org] (http://cdecl.org) – bashor