Différence entre const char * p et char const * p

Dupliquer possible:
Quelle est la difference entre const int *, const int * const, int const *

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

Certains mots ne sont pas dans le même ordre.

(il n’y a pas de différence sémantique jusqu’à ce que le const se déplace par rapport à l’écanvas)

const char* p est un pointeur sur un const char .

char const* p est un pointeur sur un caractère char const .

Puisque const char et char const sont identiques, il en va de même.

Cependant, considérez:

char * const p est un pointeur const sur un caractère (non-constant). C’est-à-dire que vous pouvez changer le caractère réel, mais pas le pointeur qui le pointe.

Aucune différence, puisque la position du ‘*’ n’a pas bougé.

1) const char * p – Pointeur sur un caractère constant (‘p’ n’est pas modifiable, mais le pointeur l’est)
2) char const * p – Pointeur également sur une constante Char

Cependant, si vous aviez quelque chose comme:
char * const p – Ceci déclare que ‘p’ est un pointeur constant sur un caractère. (Le caractère p est modifiable mais le pointeur ne l’est pas)

Il n’y a pas de différence fonctionnelle entre ces deux. Le ‘plus précis’ est char const * p parce que la sémantique va de droite à gauche.

Il n’y a pas de différence sémantique, mais c’est une question de style de codage et de lisibilité. Pour les expressions complexes, lire de droite à gauche fonctionne très bien:

char const ** const

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

Donc, char const * est plus cohérent à cet égard. Cependant, beaucoup de gens préfèrent const char* pour sa lisibilité – sa signification est immédiatement claire.