Les constantes de caractères en C (opposées à C ++) ont le type int
. Donc cet appel
printf("%d",sizeof('A'));
sorties 4. C'est sizeof( 'A' )
égal à sizeof( int )
.
De la norme C (6.4.4.4 Constantes de caractères)
10 Une constante de caractère entier a le type int ....
En revanche (6.5.3.4 Les opérateurs sizeof et alignof)
4 Lorsque sizeof est appliqué à un opérande de type char, char non signé ou char signé (ou une version qualifiée de celui-ci), le résultat est 1.
Ainsi, l'opérande de l' sizeof
opérateur dans cette expression sizeof( 'A' )
a le type int tandis que dans cette expression sizeof( a )
où a est déclaré comme
char a = 'A';
l'opérande a le type char
.
Faites attention à ces appels comme celui-ci
printf("%d",sizeof(6.5));
utilisez un spécificateur de format de conversion incorrect. Vous devez écrire
printf("%zu",sizeof(6.5));
Dans l'appel ci-dessus, une constante du type est utilisée double
lors de cet appel
printf("%zu",sizeof(c));
la variable c
a le type float
.
Vous pouvez obtenir le même résultat pour ces appels si le premier appel utilise une constante de type float comme
printf("%zu",sizeof(6.5f));
6.5
n'est pas un flotteur, c'est undouble