No son lo mismo.
El primero designa un const-pointer-to-char, el segundo es un puntero-a-const-char.
Trate de leer de derecha a izquierda:
const char *p; // p is a pointer to char which is const
char const *p; // p is a pointer to const char (same as previous)
char * const p; // p is a const pointer to char
char const * const p; // p is a const pointer to const char
Al utilizar el typedef typedef char* c
de empacar el significado "puntero a char" en un solo alias c
:
const c p; // p is a const [c] --> p is a const [pointer to char]
explicaciones adicionales :
typedefs no están en el lugar expandieron como macros son, es decir,
const c p;
realmente se convierte en
const [char*] p;
sí no se convierta en
const char* p; // Nope.
no se expanden como si fuera macros en su mente, con typedefs, ha vinculado char
y *
juntos y formó un átomo.
Esto es interesante. Estoy realmente sorprendido. +1 –
Lo sé, pero cuando el compilador no debería tratarlo como * const char * *, porque * c * se está expandiendo a * char * *, eso es lo que estoy preguntando. – cirronimbo
@cirronimbo: consulte la sección "usando typedef" en mi respuesta. –