Heim >Backend-Entwicklung >C++ >Warum erzeugt „sizeof' unterschiedliche Ergebnisse für String-Literale, Zeiger und Zeichen-Arrays?

Warum erzeugt „sizeof' unterschiedliche Ergebnisse für String-Literale, Zeiger und Zeichen-Arrays?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-01 06:28:15824Durchsuche

Why Does `sizeof` Produce Different Results for String Literals, Pointers, and Character 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:

  • Arrays zerfallen nicht in Zeiger, wenn sie an sizeof übergeben werden. Dies erklärt die Ausgabe von 2 für sizeof(bar), da bar ein konstantes Zeichenarray ist.
  • Der Typ des String-Literal-Arguments für sizeof beeinflusst das Ergebnis. Beispielsweise würde sizeof("foo" 1) sowohl auf 32-Bit- als auch auf 64-Bit-Maschinen 4 zurückgeben, da der Operand ein Ausdruck vom Typ const char* ist.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn