#include <stdio.h>
int main() {
char a = 'A';
int b = 90000;
float c = 6.5;
printf("%d ",sizeof(6.5));
printf("%d ",sizeof(90000));
printf("%d ",sizeof('A'));
printf("%d ",sizeof(c));
printf("%d ",sizeof(b));
printf("%d",sizeof(a));
return 0;
}
Die Ausgabe ist:
8 4 4 4 4 1
Warum unterscheidet sich die Ausgabe für dieselben Werte?
6.5
ist kein Schwimmer, es ist eindouble
printf("%d",sizeof(6.5f));
um es zu machen afloat
.printf("%zu", sizeof(6.5));
Antworten:
Zeichenkonstanten in C (im Gegensatz zu C ++) haben den Typ
int
. Also dieser AnrufAusgänge 4. Das
sizeof( 'A' )
ist gleichsizeof( int )
.Aus dem C-Standard (6.4.4.4 Zeichenkonstanten)
Auf der anderen Seite (6.5.3.4 Die Größe und Ausrichtung der Operatoren)
Der Operand des
sizeof
Operators in diesem Ausdrucksizeof( 'A' )
hat also den Typ int, während in diesem Ausdrucksizeof( a )
a wie folgt deklariert istDer Operand hat den Typ
char
.Achten Sie darauf, dass Anrufe wie diese
Verwenden Sie einen falschen Konvertierungsformatbezeichner. Du musst schreiben
Auch im obigen Aufruf wird
double
während dieses Aufrufs eine Konstante des Typs verwendetDie Variable
c
hat den Typfloat
.Sie könnten das gleiche Ergebnis für diese Aufrufe erhalten, wenn der erste Aufruf eine Konstante vom Typ float like verwendet
quelle
Konstanten haben wie Variablen einen eigenen Typ:
6.5
: Eine Gleitkommakonstante vom Typdouble
90000
: Eine Ganzzahlkonstante vom Typint
(wennint
32 Bit) oderlong
(wennint
16 Bit)'A'
: Eine Zeichenkonstante vom Typint
in C undchar
in C ++Die gedruckten Größen sind die Größen der oben genannten Typen.
Auch das Ergebnis des
sizeof
Operators hat Typsize_t
. Also , wenn die Spezifikations richtigen Format zu verwenden Druck ist%zu
, nicht%d
.quelle
Weil die Werte keine Rolle spielen
sizeof
. Es ist die Größe der Typen.Zeichenkonstanten sind
int
s, nichtchar
s.Gleitkommakonstanten sind standardmäßig
double
s, es sei denn, Sie fügen sie mitf
oder hinzul
.quelle