Heim >Backend-Entwicklung >C++ >Was ist der Unterschied zwischen „sizeof' einem String-Literal, einem „const char* const' und einem „const char[]'?

Was ist der Unterschied zwischen „sizeof' einem String-Literal, einem „const char* const' und einem „const char[]'?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-02 17:19:10668Durchsuche

What's the Difference Between `sizeof` a String Literal, a `const char* const`, and a `const char[]`?

Sizeof String Literal: Die Unterschiede aufdecken

Betrachten Sie den folgenden Codeausschnitt:

#include <iostream>
using namespace std;

int main()
{
    const char* const foo = "f";
    const char bar[] = "b";
    cout << "sizeof(string literal) = " << sizeof("f") << endl;
    cout << "sizeof(const char* const) = " << sizeof(foo) << endl;
    cout << "sizeof(const char[]) = " << sizeof(bar) << endl;
}

Die Ausführung dieses Codes zeigt faszinierend Ergebnisse:

sizeof(string literal) = 2
sizeof(const char* const) = 4
sizeof(const char[]) = 2

Verstehen der Ergebnisse

  • sizeof("f"): Dies ergibt 2, da es enthält das Zeichen „f“ und das abschließende Nullzeichen ' '.
  • sizeof(foo): Da foo ein Zeiger ist, gibt sizeof(foo) 4 auf einem 32-Bit-System und 8 auf einem 64-Bit-System zurück. Dies stellt die Größe des Zeigers selbst dar, nicht die Zeichenfolge, auf die er zeigt.
  • sizeof(bar): Dieser Ausdruck gibt 2 zurück, da bar ein Array aus zwei Zeichen ist: 'b' und ' '.

Interpretation des String-Literal-Typs

Während sizeof den benötigten Platz berechnet Für das Zeichenfolgenliteral wird der zugrunde liegende Typ nicht geändert. Das String-Literal hat weiterhin den Typ „Array der Größe N von const char“, wobei N für das abschließende Nullzeichen steht.

Array vs. Zeigerverhalten

Es ist wichtig zu beachten, dass Arrays nicht in Zeiger zerfallen, wenn sie an sizeof übergeben werden. Dies bedeutet, dass sizeof(bar) die Größe des Arrays selbst zurückgibt, nicht die Größe eines Zeigers auf das Array.

Fazit

Zusammenfassend lässt sich sagen, dass sizeof(" f") gibt den für das String-Literal erforderlichen Platz zurück, einschließlich des Nullzeichens. Aufgrund der Typunterschiede verhalten sich sizeof(foo) und sizeof(bar) jedoch unterschiedlich. Das Verständnis dieser Nuancen ist wichtig, wenn Sie in der C-Programmierung mit String-Literalen arbeiten.

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen „sizeof' einem String-Literal, einem „const char* const' und einem „const char[]'?. 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