pourquoi sizeof (‘a’) vaut 4 en C?

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 CThe 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.