Zeichenkonstanten in C (im Gegensatz zu C ++) haben den Typ int. Also dieser Anruf
printf("%d",sizeof('A'));
Ausgänge 4. Das sizeof( 'A' )ist gleich sizeof( int ).
Aus dem C-Standard (6.4.4.4 Zeichenkonstanten)
10 Eine ganzzahlige Zeichenkonstante hat den Typ int ....
Auf der anderen Seite (6.5.3.4 Die Größe und Ausrichtung der Operatoren)
4 Wenn sizeof auf einen Operanden angewendet wird, der den Typ char, ein vorzeichenloses Zeichen oder ein vorzeichenbehaftetes Zeichen (oder eine qualifizierte Version davon) hat, ist das Ergebnis 1.
Der Operand des sizeofOperators in diesem Ausdruck sizeof( 'A' )hat also den Typ int, während in diesem Ausdruck sizeof( a )a wie folgt deklariert ist
char a = 'A';
Der Operand hat den Typ char.
Achten Sie darauf, dass Anrufe wie diese
printf("%d",sizeof(6.5));
Verwenden Sie einen falschen Konvertierungsformatbezeichner. Du musst schreiben
printf("%zu",sizeof(6.5));
Auch im obigen Aufruf wird doublewährend dieses Aufrufs eine Konstante des Typs verwendet
printf("%zu",sizeof(c));
Die Variable chat den Typ float.
Sie könnten das gleiche Ergebnis für diese Aufrufe erhalten, wenn der erste Aufruf eine Konstante vom Typ float like verwendet
printf("%zu",sizeof(6.5f));
6.5ist kein Schwimmer, es ist eindouble