2011-12-28 15 views
9

Duplicar posible:
Why are C character literals ints instead of chars?¿por qué sizeof ('a') es 4 en C?

#include<stdio.h> 
int main(void) 
{ 
    char b = 'c'; 
    printf("here size is %zu\n",sizeof('a')); 
    printf("here size is %zu",sizeof(b)); 
} 

aquí salida se (Ver demostración en vivo here.)

here size is 4 
here size is 1 

No estoy recibiendo por qué es sizeof('a') 4?

+0

Ver [¿Por qué C enteros caracteres literales en lugar de caracteres?] (Http://stackoverflow.com/questions/433895/why-are-c- character-literales-ints-instead-of-chars) –

Respuesta

10

Porque en C las constantes de caracteres, como 'a' tienen el tipo int.

Hay una C FAQ sobre este suject:

Quizás sorprendentemente, constantes de caracteres en C son de tipo int, por lo sizeof ('a') es sizeof (int) (aunque esto es otra área donde C++ es diferente).

3

'a' de forma predeterminada es un número entero y debido a eso se obtiene el tamaño de int en su máquina de 4 bytes.

char tiene 1 bytes y debido a esto obtiene 1 bytes.

10

La siguiente es la famosa línea del famoso libro C - The C programming Language por Kernighan & Ritchie con respecto a un carácter escrito entre comillas 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.

Así sizeof('a') es equivalente a sizeof(int)