Le costanti di carattere in C (opposto a C ++) hanno il tipo int
. Quindi questa chiamata
printf("%d",sizeof('A'));
uscite 4. Questo sizeof( 'A' )
è uguale a sizeof( int )
.
Dallo standard C (6.4.4.4 Costanti di carattere)
10 Una costante di carattere intero ha tipo int ....
D'altra parte (6.5.3.4 La dimensione e l'allineamento degli operatori)
4 Quando sizeof viene applicato a un operando che ha tipo char, unsigned char, o char firmato (o una sua versione qualificata) il risultato è 1.
Quindi l'operando sizeof
dell'operatore in questa espressione sizeof( 'A' )
ha il tipo int mentre in questa espressione sizeof( a )
dove a è dichiarato come
char a = 'A';
l'operando ha il tipo char
.
Presta attenzione alle chiamate in questo modo
printf("%d",sizeof(6.5));
utilizzare un identificatore di formato di conversione errato. Devi scrivere
printf("%zu",sizeof(6.5));
Anche nella chiamata precedente viene utilizzata una costante del tipo double
durante questa chiamata
printf("%zu",sizeof(c));
la variabile c
ha il tipo float
.
È possibile ottenere lo stesso risultato per queste chiamate se la prima chiamata utilizzava una costante del tipo float come
printf("%zu",sizeof(6.5f));
6.5
non è un galleggiante, è undouble