Heim > Backend-Entwicklung > C++ > Warum gibt „sizeof' unterschiedliche Werte für String-Literale, Zeiger und Arrays in C zurück?

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

Patricia Arquette
Freigeben: 2024-11-30 20:40:17
Original
919 Leute haben es durchsucht

Why Does `sizeof` Return Different Values for String Literals, Pointers, and Arrays in C  ?

Sizeof String Literal

In C berechnet sizeof die Größe eines Datentyps oder Ausdrucks. Bei Anwendung auf ein Zeichenfolgenliteral berechnet sizeof die Länge des Literals, einschließlich des abschließenden Nullzeichens (' ').

Informationen zur Ausgabe

Der bereitgestellte Code berechnet die Größen eines String-Literals, eines const char* const und eines const char[]. Die Ausgabe auf einem mit GCC kompilierten 32-Bit-Betriebssystem lautet:

sizeof(string literal) = 2
sizeof(const char* const) = 4
sizeof(const char[]) = 2
Nach dem Login kopieren

Warum sizeof die Länge des String-Literals berechnet

sizeof("f") wertet aus auf 2, da das Zeichenfolgenliteral aus dem Zeichen „f“ und einer abschließenden Null besteht Zeichen.

Typen in der Größe von Ausdrücken

  • Das String-Literal „f“ ist ein Array der Größe 2 von const char, einschließlich des Nullterminators.
  • Der Zeiger foo ist ein const char* const, der auf ein const char zeigt und er selbst ist const.
  • Die Array-Leiste ist ein const char[] der Größe 2, das „b“ und den Nullterminator enthält.

Vorbehalt: Arrays in sizeof

Beachten Sie, dass Arrays nicht in Zeiger zerfallen, wenn sie an sizeof übergeben werden. Daher gibt sizeof(bar) korrekterweise 2 anstelle der Zeigergröße zurück (4 auf 32-Bit-Betriebssystemen).

Das obige ist der detaillierte Inhalt vonWarum gibt „sizeof' unterschiedliche Werte für String-Literale, Zeiger und Arrays in C zurück?. 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