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.