Pourquoi ne puis-je pas incrémenter un tableau?

char a[] = "hello"; 

Si j’ai bien compris, a agit comme un pointeur constant sur une chaîne. Je sais que l’écriture d’ a++ ne fonctionnera pas, mais pourquoi?

Non, ce n’est pas OK d’incrémenter un tableau. Bien que les tableaux soient librement convertibles en pointeurs, ils ne sont pas des pointeurs. Par conséquent, l’écriture d’ a++ déclenchera une erreur.

Cependant, l’écriture

 char *p = a; p++; 

est bien, parce que p est un pointeur, avec une valeur égale à l’emplacement de l’élément initial de a.

a++ n’est pas bien formé depuis a décomposition en un pointeur, et le résultat de la décomposition n’est pas une valeur (donc il n’y a aucun object persistant dont l’état pourrait être “incrémenté”).

Si vous voulez manipuler des pointeurs vers le tableau, vous devez d’abord créer un tel pointeur:

 char* p = a; // decayed pointer initializes p a++; // OK ++a; // even OKer 

Il n’est jamais légal en C d’affecter une expression de type tableau. Increment ( ++ ) implique une affectation et n’est donc pas légal.

Ce que vous avez montré en haut est une syntaxe spéciale pour initialiser une variable de tableau de caractères.