Différence de sizeof entre char * x et car x

Je connais une différence entre char * et char []. char x[] = "xxxx" Est un tableau de caractères; char *y = "xxxx" est un pointeur sur la chaîne littérale (const); Et x[4]=='\0' et *(y+4) == '\0' aussi. Alors pourquoi sizeof(x)==5 et sizeof(y)==4 ?

La taille d’un type de tableau correspond à la taille du tableau. Identique à sizeof("xxxx") .

La taille d’un type de pointeur est la taille que prend le pointeur lui-même. Identique à sizeof(char*) .

char x[] = "xxxx" est un tableau de taille 5 contenant xxxx et \ 0.

char *y = "xxxx" est un pointeur sur une chaîne. Sa longueur est de 4 octets, car c’est la longueur du pointeur, pas la chaîne.

x est vraiment "xxxx\0" . Le terminateur nul à la fin de la chaîne donne au tableau cinq octets.

Cependant, sizeof(y) demande la taille d’un pointeur, qui se trouve être quatre octets dans votre cas. Ce que y indique n’a aucune incidence sur le sizeof() .

Pour char *x , x est un pointeur, ce qui signifie que vous pouvez modifier la position pointée par x++ , x+=2 , etc.