Heim > Backend-Entwicklung > C++ > Wie behandelt „sizeof' String-Literale, Arrays und Zeiger in C unterschiedlich?

Wie behandelt „sizeof' String-Literale, Arrays und Zeiger in C unterschiedlich?

Linda Hamilton
Freigeben: 2024-12-07 09:03:13
Original
154 Leute haben es durchsucht

How Does `sizeof` Differently Handle String Literals, Arrays, and Pointers in C  ?

Größe des String-Literals: Den Speicherbedarf von String-Konstanten verstehen

In C sind String-Literale ein integraler Bestandteil des Codes und stellen feste Sequenzen dar von Charakteren. Der sizeof-Operator spielt eine entscheidende Rolle beim Verständnis der Speicherzuordnung und des Layouts dieser String-Literale.

Frage 1: Warum berechnet sizeof die Länge eines String-Literals?

Bei Anwendung auf ein Zeichenfolgenliteral wie „f“ misst der Operator „sizeof“ die Anzahl der im Literal gespeicherten Zeichen, einschließlich des abschließenden Nullzeichens (' '). Im Fall von „f“ wird der Speicherplatz berechnet, der zum Speichern von zwei Zeichen erforderlich ist, da es sowohl das „f“ als auch den Nullterminator enthält.

Frage 2: Hat das String-Literal einen Unterschied? Typ bei Angabe von sizeof?

String-Literale haben einen bestimmten Typ: ein Array von Zeichen mit bekannter Größe, wobei die Größe das Null-Terminator enthält. Dieser Typ unterscheidet sich von char* (Zeiger auf ein Zeichen) und char[] (Array von Zeichen). Bei der Übergabe an sizeof bleibt der Array-Typ des String-Literals erhalten, was zu einem Ergebnis führt, das die Größe des Arrays und nicht die Größe eines Zeigers widerspiegelt.

Warum gibt sizeof unterschiedliche Werte für String-Literale zurück? , Arrays und Zeiger?

  • sizeof("f"): Gibt 2 zurück, da es die Größe des Arrays von misst Zeichen, die 'f' und ' ' enthalten.
  • sizeof(foo): Gibt 4 (auf 32-Bit-Systemen) oder 8 (auf 64-Bit-Systemen) zurück, da es die Größe der Zeigervariablen foo misst das die Adresse des String-Literals enthält.
  • sizeof(bar): Gibt 2 zurück, da es die Größe des Zeichenarrays misst, das „b“ und enthält ' '.

Denken Sie daran:

  • String-Literale haben den Typ: Array der Größe N von const char (wobei N den Nullterminator enthält) .
  • Arrays zerfallen nicht in Zeiger, wenn sie an sizeof übergeben werden.

Das obige ist der detaillierte Inhalt vonWie behandelt „sizeof' String-Literale, Arrays und Zeiger in C unterschiedlich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage