2011-12-28 32 views
9

Eventuali duplicati:
Why are C character literals ints instead of chars?perché sizeof ('a') è 4 in 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)); 
} 

qui di uscita (si veda la demo live here.)

here size is 4 
here size is 1 

Non ricevo perché sizeof('a') è 4?

+0

Sede [Perché C int carattere letterali invece di caratteri?] (Http://stackoverflow.com/questions/433895/why-are-c- personaggio-letterali-int-posto-di-caratteri) –

risposta

10

Perché in costanti di carattere C, ad esempio 'a' è il tipo int.

C'è un C FAQ su questo suject:

Forse sorprendentemente, costanti carattere in C sono di tipo int, così sizeof ('a') è sizeof (int) (anche se questo è un altro settore dove C++ differisce).

3

'a' di default è un numero intero e per questo si ottiene la dimensione di int nella macchina di 4 byte.

char è 1 byte e per questo si ottiene 1 byte.

10

Quanto segue è la famosa linea del famoso libro C - The C programming Language di Kernighan & Ritchie rispetto a un carattere scritto tra virgolette singole.

A character written between single quotes represents an integer value equal to the numerical value of the character in the machine's character set.

Così sizeof('a') è equivalente a sizeof(int)