Betrachten Sie das ProgrammOperator sizeof() in C
main()
{
printf("%d %d %d",sizeof('3'),sizeof("3"),sizeof(3));
}
Ausgabe von einem gcc-Compiler ist:
4 2 4
Warum ist es so?
Betrachten Sie das ProgrammOperator sizeof() in C
main()
{
printf("%d %d %d",sizeof('3'),sizeof("3"),sizeof(3));
}
Ausgabe von einem gcc-Compiler ist:
4 2 4
Warum ist es so?
Sie Unter der Annahme ausgeführt wird auf einem 32-Bit-System:
sizeof einen Zeichenliteral '3' 4 ist, weil Zeichenliterale ints in der Sprache C ist (aber nicht C++).
sizeof "3" ist 2, weil es ein Array-Literal mit der Länge 2 ist (Zahl 3 plus NULL-Terminator).
sizeof literal 3 ist 4, weil es ein int ist.
Die Antworten auf diese Frage helfen, einige mehr zu erklären - http://stackoverflow.com/questions/2252033/in-c-why-is-sizeofchar-1-when-a-is-anint –
Warum ist "3" ein Integer? – Mohit
In C sind Zeichenliterale vom Typ int. Nicht so mit C++. –
sizeof() Ausgabe ist abhängig von Compiler Sie verwenden
einige Punkte im Auge zu behalten:
sizeof
keine Funktion ist, ist es ein Operator ist. Es gibt die Größe eines Typs in Einheiten von sizeof char
zurück. Mit anderen Worten sizeof char
ist immer 1.int
char[2]
, das Zeichen 3 dann das Nullabschluss.int
Mit diesen Unterschieden sind leicht erklärt:
int
benötigt 4 char
s Platz, es zu haltenchar[2]
natürlich erfordert nur 2 char
s+1 für die Erwähnung von 'sizeof' ist ein Operator. Pet pisse von mir: Die Klammern in 'sizeof (char)' gehören zu dem Typ (wo sie gebraucht werden). Sie können (und sollten) in 'sizeof '3'' weggelassen werden. – schot
Um K 01 zu zitierenR,
Jeder Compiler frei ist geeignete Größen für die eigene Hardware, unterliegt lediglich der der Einschränkung zu wählen, die Kurzschlüsse und ints sind mindestens 16 Bit, longs mindestens 32 Bits, und kurz ist nicht mehr als Int, die nicht länger als lang ist.
Überprüfen Sie, ob sizeof (int) und sizeof (char) und sizeof (char *) – Vijay
'sizeof' ist keine Funktion, sondern ein Operator. –
@benjamin button: andere Reihenfolge würde OP-Frage :) – akira