4 c'est un entier non ?
donc toto + 4 est une opération entre entiers, juste ?
et pourtant on stocke le résultat dans un type pointeur de char.
Formidable ! Le compilateur a retrouvé ses petits avec le type char et a su de combien gérer l'incrèment du pointeur.
Demo
void main(void)
{
char *toto="hello";
int *popo="hello";
char *tata=toto+4;
int *pipi=popo+1;
printf("%s %s", tata, (char *)pipi);
}
Les deux affichent "o".
Bref, c'est là où C c'est du n'importe quoi. Mais c'est fait exprès.