Heim >Backend-Entwicklung >C++ >Warum erzeugt „sizeof' unterschiedliche Ergebnisse für String-Literale, Zeiger und Zeichen-Arrays?
Größe von String-Literalen
Der angegebene Code demonstriert die Verwendung des Operators „sizeof“ für verschiedene Arten von String-Konstanten. Die Ausgabe zeigt, dass sich die Größe eines String-Literals, sizeof("f"), von der Größe eines Zeigers auf ein String-Literal (sizeof(foo)) sowie von der Größe eines Zeichenarrays (sizeof(bar) unterscheidet )).
Warum berechnet sizeof die Länge eines String-Literals?
Der sizeof-Operator berechnet die Größe seines Operanden in Bytes. Bei einem Zeichenfolgenliteral ist der Operand die entsprechende Zeichenarray-Darstellung, einschließlich des abschließenden Nullzeichens (''). Dies erklärt die Ausgabe von 2 für sizeof("f"), da es die Zeichen „f“ und „ ' berücksichtigt.
Hat das String-Literal einen anderen Typ, wenn es an sizeof übergeben wird?
Nein. Ein Zeichenfolgenliteral hat den Typ const char[N], wobei N die Länge der Zeichenfolge einschließlich des abschließenden Nullzeichens ist. Wenn jedoch ein String-Literal an den sizeof-Operator übergeben wird, behandelt er den String als Ausdruck vom Typ const char*, dem Typ von Zeigern auf Zeichen. Dies erklärt die Ausgabe von 4 für sizeof(foo), da es sich um die Größe eines Zeigers auf einer 32-Bit-Maschine handelt.
Zusätzliche Punkte:
Das obige ist der detaillierte Inhalt vonWarum erzeugt „sizeof' unterschiedliche Ergebnisse für String-Literale, Zeiger und Zeichen-Arrays?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!