En C++ cuál es la diferencia entre char const *ptr=&ch;
y const char *ptr=&ch;
Declaración de punteros en C++
Respuesta
Son lo mismo, es decir pointer to const char
.
Sin embargo char * const ptr
es diferente, que es const pointer to (non-const) char
.
Y solo para completar el conjunto, const char * const ptr
es un const pointer to const char
.
+1. Respuesta completa. – ereOn
Este es un buen ejemplo de agueing a favor de poner el 'const' calificado * después de * el tipo calificado. 'char const *' parece extraño para muchas personas, pero es consistente con 'char const * const'. –
No hay diferencia en C++.
Es importante const
es anterior a *
o después de *
.
Const se aplica a lo que está a su izquierda inmediata (que no sea si no hay nada allí, en cuyo caso se aplica a lo que sea su derecho inmediato). Entonces no hay diferencia
char * const ptr
Sin embargo, sería un indicador de const a valor variable.
Otras respuestas han cubierto la solución técnica: sus dos ejemplos son los mismos.
Muchas personas prefieren leer de derecha a izquierda cuando se trata de const
en C++. En inglés, nos gusta pensar en una X constante, mientras que a C++ le gusta analizar una X const. Leer de derecha a izquierda produce un resultado más inglés.
Un ejemplo extremo:
C const * bar(A * const, B const * const) const;
De derecha a izquierda esto se lee como 'una función constante bar
tomando como parámetros un puntero constante a un A
y un puntero constante a una constante B
, devolviendo un puntero a una constante C
'. Tenga en cuenta que los tres tipos de punteros son diferentes.
Si alguien está interesado, el libro "C++ Gotchas" de Stephen C. Dewhurst habla sobre esta técnica de declarar punteros. – TheJuice
char const *ptr=&ch;
y const char *ptr=&ch;
significa que char es const, mientras que el puntero es variable (o puede cambiarse).
Pero en el caso de char * const ptr
, no puede volver a asignar el puntero una vez que lo configuró. entonces es un puntero de const a una cadena de caracteres.
- 1. Inicializando punteros en C++
- 2. Void punteros a struct punteros en C
- 3. C++ Punteros a punteros en Java
- 4. C declaración de variable
- 5. punteros void en C++
- 6. punteros vacío en C++
- 7. ¿Los punteros siempre están configurados como nulos en la declaración?
- 8. Aritmética de punteros en C
- 9. Punteros de función en C#
- 10. punteros inteligentes en C++: compartir punteros vs. compartir datos
- 11. Uso de punteros C#
- 12. punteros de Objective-C?
- 13. matriz de punteros C
- 14. C++ vector de punteros
- 15. Cadenas y punteros en C++
- 16. Cuándo utilizar punteros en C++
- 17. ¿Es seguro mantener los punteros de C++ en C#?
- 18. ¿Qué hace '&' en una declaración de C++?
- 19. punteros C++ a operadores
- 20. Omitir declaración de devolución en C++
- 21. C++: cuándo usar punteros?
- 22. C# punteros vs IntPtr
- 23. C++: Punteros y alcance
- 24. Matriz de punteros de función en C
- 25. Incrementando punteros C
- 26. punteros C Pregunta
- 27. Objetivo-C uso de punteros
- 28. alcances y C++ punteros
- 29. Implementando el equivalente en C++ de C# usando la declaración
- 30. Declaración fija en C#
No hay diferencia, para obtener más información: http://duramecho.com/ComputerInformation/WhyHowCppConst.html – Akanksh
posible duplicado de http://stackoverflow.com/questions/2211954/difference-between-these-two-const -pointer-declarations-c – starblue
Además, puede usar [cdecl.org] (http://cdecl.org) – bashor