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 sizeof
Operators 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 double
während dieses Aufrufs eine Konstante des Typs verwendet
printf("%zu",sizeof(c));
Die Variable c
hat 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.5
ist kein Schwimmer, es ist eindouble