Dupliquer possible:
Pourquoi les littéraux de caractères C sont-ils au lieu de caractères?
#include int main(void) { char b = 'c'; printf("here size is %zu\n",sizeof('a')); printf("here size is %zu",sizeof(b)); }
ici la sortie est (Voir la démo en direct ici .)
here size is 4 here size is 1
Je ne comprends pas pourquoi sizeof('a')
vaut 4?
Parce que dans C, les constantes de caractère, telles que ‘a’ ont le type int
.
Il y a une FAQ C à propos de ce sujet:
Peut-être étonnamment, les constantes de caractère dans C sont de type int , donc sizeof (‘a’) est sizeof (int) (bien que ce soit un autre domaine où C ++ diffère).
Ce qui suit est la célèbre phrase du célèbre livre C
– The C programming Language
de Kernighan & Ritchie
concernant un caractère écrit entre guillemets simples.
A character written between single quotes represents an integer value equal to the numerical value of the character in the machine's character set.
Donc sizeof('a')
est équivalent à sizeof(int)
‘a’ est par défaut un entier, ce qui vous donne 4 octets de la taille de int.
char est de 1 octet et à cause de cela vous obtenez 1 octet.