2017-09-25 16 views
1

J'ai le code suivant:C Pourquoi sizeof ('a') = 4 et sizeof (char) = 1?

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char * argv[]){ 
    printf("size of tab = %d\n", sizeof('\t')); 
    printf("size of a = %d\n", sizeof('a')); 
    printf("size of char = %d\n", sizeof(char)); 
} 

Sortie:

size of tab = 4 
size of a = 4 
size of char = 1 

Pourquoi la taille de 'a' et la taille des char différents. N'est-ce pas 'a' un char?

+1

'sizeof ('\ t')' calcule en fait la taille d'un '' int' où int' est la valeur ASCII de ' '\' t 'et similaire est le cas de' sizeof ('a') '' –

+0

'' a'' est un 'int'. Toutes les constantes dans C sont au moins 'int'. – chux

+0

6.4.4.4 Constantes de caractère p2 _La constante de caractère entier est une séquence d'un ou plusieurs caractères codés sur plusieurs octets. entre guillemets simples, comme dans 'x' ._ et p10 _La constante de caractère entier est de type int._ 6.5.3.4 ... opérateurs p4 _Lorsque sizeof est appliqué à un opérande de type char, unsigned char, ou char signé, (ou une version qualifiée de celui-ci) le résultat est 1._ – BLUEPIXY

Répondre

1

'a est l'int contenant le caractère a. jeter un oeil sur les valeurs de ces expressions:

sizeof((char) 'a'); 
char a = 'a'; 
sizeof(a);