Diferencia entre const char * p y char const * p

Posible duplicado:
¿Cuál es la diferencia entre const int *, const int * const, int const *

Are there any Difference between const char* p and char const* p 

Algunas de las palabras no están en el mismo orden.

(no hay diferencia semántica hasta que la constante se mueve en relación con la estrella)

const char* p es un puntero a un const char .

char const* p es un puntero a una char const .

Dado que const char y char const es lo mismo, es lo mismo.

Sin embargo, considere:

char * const p es un puntero de const para un (no-const) char. Es decir, puede cambiar el carácter real, pero no el puntero que lo señala.

No hay diferencia, ya que la posición del ‘*’ no se ha movido.

1) const char * p – Puntero a un carácter constante (‘p’ no es modificable pero el puntero es)
2) char const * p – También puntero a una constante Char

Sin embargo si tuvieras algo como:
char * const p – Esto declara que ‘p’ es un puntero constante para un char. (Char p es modificable pero el puntero no lo es)

No hay diferencia funcional entre esos dos. El ‘más preciso’ es char const * p porque la semántica es de derecha a izquierda.

No hay diferencia semántica, pero es una cuestión de estilo de encoding y legibilidad. Para expresiones complejas, leer de derecha a izquierda funciona bien:

char const ** const

es un const pointer to a pointer to a constant char .

Así que char const * es más consistente en este sentido. Sin embargo, muchas personas prefieren const char* por su legibilidad, ya que de inmediato queda claro lo que significa.